Python 3 9正式版,新特性提前一睹為快

2022-08-18 04:30:14 字數 2052 閱讀 4514

文章**:侵刪

乙個非常優雅的特性,當我們想將兩個字典進行合併時,只需要使用操作符「|」:

a =

b =

c = a | b

print(c)

輸出結果:

[out]:

不僅如此,我們還可以使用合併更新操作符「|=」直接對原始字典進行更新:

a =

b =

a |= b

print(a)

輸出結果:

[out]:

這裡需要注意的是,如果兩個字典都包含相同的key,運算結果將直接採用第二個字典的鍵值對:

a =

b =

print(a | b)

輸出結果:

[out]:

「|=」操作符還具有另乙個非常棒的功能,就是使用乙個可迭代物件的鍵值對更新字典:

a =

b = ((i, i**2) for i in range(3))

a |= b

print(a)

輸出結果:

[out]:

這裡需要注意的是,如果你使用標準的合併操作符「|」來取代上面的「|=」操作服,這會直接導致typeerror。

typeerror:unsupported opprand type(s) for |:'dict' and 'generator'

python作為動態型別的程式語言,這意味著在使用中我們並不需要給變數指定資料型別。然而雖然可以這樣做,但是這讓我們在維護**時常常感到困惑,並且靈活性也成了缺點。

在3.5版本後,雖然我們可以指定資料型別了,但是使用起來仍然非常麻煩。這次新版本就對此進行了更新:沒有型別提示vs有型別提示

上圖中我們想通過add_int函式將兩個相同的數字想加到一起,然而編譯器並沒有很好的理解我們的意圖,由於兩個字串也可以使用+進行連線,所以這裡並沒有給出警告。

現在當我們可以指定函式的引數型別時,在引數型別為int時,編譯器就能夠立即識別上述的問題。

雖然字串函式沒有其他新特性那麼強大,但字串作為開發中使用最頻繁的資料型別,這裡也需要提一下他的改變。新版本中新增了移除字首和字尾的兩個字串函式:

"hello world".removeprefix("he")

hello world".removesuffix("ld")

輸出結果:

[out]: "llo world"

[out]: "hello wor"

為乙個普通的開發者,語法解析器的變化可能不易被察覺,但它的變化有可能成為python演變中的乙個重要轉折點。

我們所知,目前python主要是用的是一種基於ll(1)的語法,這種語法可以通過ll(1)解析器進行解析,該解析器從上到下、從左到右地解析**,只需要從詞法分析器中取出乙個 token 就可以正確地解析下去。

然而ll(1) 存在的一些問題:

with (open("a_really_long_foo") as foo,

open("a_really_long_bar") as bar):

pass

毫無疑問,這些因素以及更多無法理解的其他問題影響著python的發展,而新版本的解析器是基於peg,它將給 python 開發者提供更大的靈活性,從 python 3.10開始我們將能夠感受到這一點。

到這裡 python 3.9的版本幾個重要的特性就講解完畢,我們已經迫不及待的希望正式版的到來。

python 3 9 新特性 簡介

目錄 字典 並集 運算子 型別提示的改善 裝飾器語法更加靈活 classmethod 支援包裝其他描述器 新增模組 函式 方法 參考資料 並集 運算子顧名思義就是給兩個字典取並,並產生新的字典物件。熟悉 collections 標準庫的開發者聽到這一特性想必很容易聯想到 chainmap,兩者的區別...

Python 3 8 0 正式版發布,新特性初體驗

北京時間 10 月 15 日,python 官方發布了 3.8.0 正式版,該版本較 3.7 版本再次帶來了多個非常實用的新特性。pep 572 assignment expressions 新增一種新語法形式 又稱為 海象運算子 為什麼叫海象,看看這兩個符號像不像顏表情 如果你用過 go 語言,應...

WeX5 V3 6 正式版核心特性

wex5 v3.6 正式版核心特性 一 打包特性增強 二 開發與除錯能力重要更新 三 雲部署支援增強 支援了baas.php部署到cloudx5 四 wex5的雲ide版正在迅速迭代生長 native原生特性更新 demo位置 demo plugin baidumap 2.新增cordova ope...