Python 3.8新特性之-賦值表達式

最近更新時間 2020-01-08 10:24:23

Python 3.8於2019年10月14日發佈。相比 3.7 新增賦值表達式特性。更完整的新增特性可參見更新日誌。

新增的語法 := 可在表達式內部為變量賦值。 它被暱稱為“海象運算符”因為它很像是 海象的眼睛和長牙。

在這個示例中,賦值表達式可以避免調用 len() 兩次:

if (n := len(a)) > 10:
  print(f"List is too long ({n} elements, expected <= 10)")

類似的益處還可出現在正則表達式匹配中需要使用兩次匹配對象的情況中,一次檢測用於匹配是否發生,另一次用於提取子分組:

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
    discount = float(mo.group(1)) / 100.0

此運算符也適用於配合 while 循環計算一個值來檢測循環是否終止,而同一個值又在循環體中再次被使用的情況:

# Loop over fixed length blocks
while (block := f.read(256)) != '':
    process(block)

另一個值得介紹的用例出現於列表推導式中,在篩選條件中計算一個值,而同一個值又在表達式中需要被使用:

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]
rss_feed