文章**:侵刪
乙個非常優雅的特性,當我們想將兩個字典進行合併時,只需要使用操作符「|」:
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"為乙個普通的開發者,語法解析器的變化可能不易被察覺,但它的變化有可能成為python演變中的乙個重要轉折點。[out]: "hello wor"
我們所知,目前python主要是用的是一種基於ll(1)的語法,這種語法可以通過ll(1)解析器進行解析,該解析器從上到下、從左到右地解析**,只需要從詞法分析器中取出乙個 token 就可以正確地解析下去。
然而ll(1) 存在的一些問題:
with (open("a_really_long_foo") as foo,毫無疑問,這些因素以及更多無法理解的其他問題影響著python的發展,而新版本的解析器是基於peg,它將給 python 開發者提供更大的靈活性,從 python 3.10開始我們將能夠感受到這一點。open("a_really_long_bar") as bar):
pass
到這裡 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...