Python 炫技操作:海象運算符的三種用法

2021-01-11 AI科技大本營

作者 | 明哥

Python 版本發展非常快,如今最新的版本已經是 Pyhton 3.9,即便如此,有很多人甚至還停留在 3.6 或者 3.7,連 3.8 還沒用上。

很多 Python 3.8 的特性還沒來得及了解,就已經成為舊知識了,比如今天要說的海象運算符。

海象運算符是在 PEP 572 被提出的,直到 3.8 版本合入發布。

它的英文原名叫 Assignment Expressions,翻譯過來也就是賦值表達式,不過現在大家更普遍地稱之為海象運算符,就是因為它長得真的太像海象了。

1. 第一個用法:if/else

可能有朋友是第一次接觸這個新特性,所以還是簡單的介紹一下這個海象運算符有什麼用?

在 Golang 中的條件語句可以直接在 if 中運算變量的獲取後直接對這個變量進行判斷,可以讓你少寫一行代碼

import "fmt"func main {if age := 20;age > 18 {fmt.Println("已經成年了")}}若在 Python 3.8 之前,Python 必須得這樣子寫

age = 20if age > 18:print("已經成年了")但有了海象運算符之後,你可以和 Golang 一樣(如果你沒學過 Golang,那這裡要注意,Golang 中的 :=叫短變量聲明,意思是聲明並初始化,它和 Python 中的:=不是一個概念)

if (age:= 20) > 18:print("已經成年了")

2. 第二個用法:while

在不使用 海象運算符之前,使用 while 循環來讀取文件的時候,你也許會這麼寫

file = open("demo.txt", "r")while True:line = file.readlineif not line:breakprint(line.strip)但有了海象運算符之後,你可以這樣

file = open("demo.txt", "r")while (line := file.readline):print(line.strip)使用它替換以往的無限 while 循環寫法更為驚豔

比如,實現一個需要命令行交互輸入密碼並檢驗的代碼,你也許會這樣子寫

while True:p = input("Enter the password: ")if p == "youpassword":break有了海象運算符之後,這樣子寫更為舒服

while (p := input("Enter the password: ")) != "youpassword":continue

3. 第三個用法:推導式

這個系列的文章,幾乎每篇都能看到推導式的身影,這一篇依舊如此。

在編碼過程中,我很喜歡使用推導式,在簡單的應用場景下,它簡潔且不失高效。

如下這段代碼中,我會使用列表推導式得出所有會員中過於肥胖的人的 bmi 指數

members = [{"name": "小五", "age": 23, "height": 1.75, "weight": 72},{"name": "小李", "age": 17, "height": 1.72, "weight": 63},{"name": "小陳", "age": 20, "height": 1.78, "weight": 82},]count = 0def get_bmi(info):global countcount += 1print(f"執行了 {count} 次")height = info["height"]weight = info["weight"]return weight / (height**2)# 查出所有會員中過於肥胖的人的 bmi 指數fat_bmis = [get_bmi(m) for m in members if get_bmi(m) > 24]print(fat_bmis)輸出如下

執行了 1 次執行了 2 次執行了 3 次執行了 4 次[25.88057063502083]可以看到,會員數只有 3 個,但是 get_bmi 函數卻執行了 4 次,原因是在判斷時執行了 3 次,而在構造新的列表時又重複執行了一遍。

如果所有會員都是過於肥胖的,那最終將執行 6 次,這種在大量的數據下是比較浪費性能的,因此對於這種結構,我通常會使用傳統的for 循環 + if 判斷。

fat_bmis = # 查出所有會員中過於肥胖的人的 bmi 指數for m in members:bmi = get_bmi(m)if bmi > 24:fat_bmis.append(bmi)在有了海象運算符之後,你就可以不用在這種場景下做出妥協。

# 查出所有會員中過於肥胖的人的 bmi 指數fat_bmis = [bmi for m in members if (bmi := get_bmi(m)) > 24]最終從輸出結果可以看出,只執行了 3 次

執行了 1 次執行了 2 次執行了 3 次[25.88057063502083]這裡僅介紹了列表推導式,但在字典推導式和集合推導式中同樣適用。不再演示。

海象運算符,是一個新奇的特性,有不少人覺得這樣這種特性會破壞代碼的可讀性。確實在一個新鮮事物剛出來時是會這樣,但我相信經過時間的沉澱後,越來越多的人使用它並享受它帶來的便利時,這種爭議也會慢慢消失在歷史的長河中。

Github:

https://github.com/iswbm/PythonCodingTime

大促下的智能運維挑戰:阿里如何抗住「雙11貓晚」?黑客用上機器學習你慌不慌?這 7 種竊取數據的新手段快來認識一下!當莎士比亞遇見Google Flax:教你用字符級語言模型和歸遞神經網絡寫「莎士比亞」式句子Hyperledger Fabric 和企業級以太坊,誰才是企業首選?面試時遇到「看門狗」脖子上掛著「時間輪」,我就問你怕不怕?同期兩篇Nature:運行溫度高於1K的量子計算平臺問世!GitHub 標星 10,000+,Apache 頂級項目 ShardingSphere 的開源之路

相關焦點

  • 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!瀏覽器版本過低,暫不支持視頻播放3.1.3、比較(關係)運算符用於對變量或表達式的結果進行大小,真假的比較,返回結果True 、False,通常用在條件語句中作為判斷的依據。
  • 《第3章 Python 運算符與表達式》3.1.1 算術運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.1 算術運算符!3.1.1、算術運算符: 常規: + - * / 編程實例:原始碼:python = 95 # 定義變量,存儲Python的分數english = 92 # 定義變量,存儲English的分數c = 89
  • 第四課:Python運算符大全與pycharm常用快捷鍵合集!
    5.Tab 空四格(一個Tab鍵相當於四個空格鍵)6.Shift+Tab(倒退四格)運算符算術運算符賦值運算符比較運算符Tip:python當中』='與』==『號不同,一個等號代表賦值,賦值的意思就類似於我們上節課舉的例子:age(變量名)相當於一個瓶子,33相當於瓶子裡的飲品,瓶子裡面不僅可以裝33,
  • python教程之python數學運算
    中進行分數(fraction)運算分數運算是python中的一個模塊(module)。表達式python表達式是值,變量和操作符(或叫運算符)的組合。單獨的一個值是一個表達式,單獨的變量也是一個表達式。
  • Python的成員運算符和身份運算符,實操演示
    一、Python的成員運算符Python的成員運算符在其他語言有這個操作,但是沒有這個稱呼,Python的成員運算符是「是否包含運算符」,主要應用在字符串或者集合中Python的成員運算符包括:Python的成員運算符實例02:在一某個集合中是否包含某一個元素
  • Javascript之運算符
    ECMAJavascript規定了用於操作數據值的操作符,包括了算術操作符、位操作符、關係操作符和相等操作符。一、一元操作符1、運算元:我們使用運算符所應用的對象。例如我們經常使用的加法運算:1 + 2,有兩個運算元,左邊運算元1和右邊的元算元2,但是我們在開發中經常稱之為參數。
  • Java運算符之位運算符
    位運算符 尹成課程資料及演示(免費)(文末有資料連結) 位運算符是針對二進位數的每一位進行運算的符號,它是專門針對數字0和1進行操作的。
  • Python 3.8.0來了!
    它被親切地稱為「海象運算符」(walrus operator),因為它長得像海象的眼睛和象牙。 海象 這個 「海象運算符」 在某些時候可以讓你的代碼更整潔,比如: 在這個示例中,賦值表達式可以避免調用
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1.版本有限制的代碼,可以通過以上方法來判斷python版本是否符合要求。輸出和錯誤流,列表如下sys.stdin, 標準輸入流sys.stdout,標準輸出流sys.stderr,標準錯誤流具有文件句柄類似的操作
  • 策略經典 《仙境傳說:復興》職業炫技大曝光
    而繼承了端遊經典職業體系的《仙境傳說:復興》為了進一步豐富職業玩法趣味,推出了策略燒腦的職業炫技系統。劍士系:聖十字審判    聖十字審判一般作為終結技能使用。劍士丟出盾牌擊飛敵人,並揮舞巨大的重劍執行來自戰神的審判,運用神之力攻擊前方單體敵人,造成巨大的物理傷害。
  • 日本頂級大廚炫技,500斤的金槍魚切片,讓人口水直流!
    日本頂級大廚炫技,500斤的金槍魚切片,讓人口水直流!日本是著名的海鮮大國,擁有世界著名漁場,國內的人更是吃海鮮的能手,所以日本大廚處理海鮮頗有造詣,今天就讓大家來見識一下,日本頂級大廚炫技,500斤的金槍魚切片,讓人口水直流!
  • MySQL涉及二進位的運算符:位運算符
    截止目前我們已經學習了MySQL的三種運算符:算術運算符、比較運算符、邏輯運算符。三者有一個共同點都是針對字符型、表達式和十進位的數字。那有沒有一種專門為二進位數字提供的運算符呢?這就是本問題的主題:位運算符。
  • Python 爬蟲面試題 170 道:2019 版
    a = (1,2,3,[4,5,6,7],8)a[5] = 2操作類題目49.Python 交換兩個變量的值50.在讀文件操作的時候會使用 read、readline 或者 readlines,簡述它們各自的左右
  • python條件判斷語句
    python輸入語句 大家已經練習完了輸出之後呢,我們來繼續看一下輸入語句的用法 input %d為佔位,%c為引用,這時的變量c就為%d,數字類型 運算符 假設變量a為10,變量b為21
  • Python基礎學習之常用六大數據類型
    訪問列表中的值可以通過下面的方式:list1 = [1, 2, 3, 4, 5, 6]print(list1[2])同樣可以通過索引截取print ("list1[2:5]: ", list1[2:5])列表常用操作:list1.append(『7』) 追加一個元素在末尾,每次只能添加一個len(list1)
  • 詳解Java表達式與運算符
    第三小節 Java運算符運算符用於連接表達式的操作數,並對操作數執行運算。例如,表達式num1+num2,其操作數是num1和num2,運算符是」+」。在java語言中,運算符可分為5種類型:算術運算符、賦值運算符、關係運算符、邏輯運算符、位運算符。
  • 乾貨| 完美Python入門基礎知識點總結
    列表用 [ ] 標識,是 python 最通用的複合數據類型。列表中值的切割也可以用到變量 [頭下標:尾下標] ,就可以截取相應的列表,從左到右索引默認 0 開始,從右到左索引默認 -1 開始,下標可以為空表示取到頭或尾。加號 + 是列表連接運算符,星號 * 是重複操作。元組是另一個數據類型,類似於List(列表)元組用"()"標識。
  • Python中的幾個重要的小夥伴:集合,字典運算符運用篇
    >字典(dict)的clear方法2.字典(dict)的copy方法:也分為深淺複製,用法和列表中用法相同運算優先符說明解釋成員運算符成員運算符身份運算符
  • 「python學習手冊-筆記」003.數值類型
    的運算符上表中基本把python中的運算符表達式全部列舉出來了.這是由於浮點數是有限的比特位數,導致無法精確的表示某些數值.這個問題不僅在python中存在,在其他語言中同樣存在. 不過python有分數和小數,可以很好的規避這些問題. 畢竟python適合科學計算的特性不是白來的.python中的除法python中有三種風格的除法和兩種除法運算符.
  • JavaScript運算符與流程控制
    1 - 運算符(操作符)1.1 運算符的分類**運算符**(operator)也被稱為操作符,是於實現賦值、較和執算數運算等功能的符號。JavaScript中常的運算符有:- 算數運算符 - 遞增和遞減運算符 - 較運算符 - 邏輯運算符 - 賦值運算符1.2 算數運算符- 算術運算符概述概念:算術運算使的符號,於執兩個變量或值的算術運算。- 浮點數的精度問題浮點數值的Y精度是 17 位數,但在進算術計算時其精確度遠遠不如整數。