您好,登錄后才能下訂單哦!
本篇內容主要講解“Python 3.9新特性有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python 3.9新特性有哪些”吧!
字典合并
一個非常優雅的特性,當我們想將兩個字典進行合并時,只需要使用操作符“|”:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | b
print(c)
輸出結果:
[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
不僅如此,我們還可以使用合并更新操作符“|=”直接對原始字典進行更新:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)
輸出結果:
[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
這里需要注意的是,如果兩個字典都包含相同的Key,運算結果將直接采用第二個字典的鍵值對:
a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}
print(a | b)
輸出結果:
[Out]: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
可迭代對象的字典更新
“|=”操作符還具有另一個非常棒的功能,就是使用一個可迭代對象的鍵值對更新字典:
a = {'a': 'one', 'b': 'two'}
b = ((i, i**2) for i in range(3))
a |= b
print(a)
輸出結果:
[Out]: {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}
這里需要注意的是,如果你使用標準的合并操作符“|”來取代上面的“|=”操作服,這會直接導致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) 存在的一些問題:
Python 中包含非 LL(1) 語法,正因如此,當前語法采用了一些曲線救國的辦法,帶來了很多不必要的復雜性。
LL(1) 給 Python 語法造成了很多限制。某個相關話題提到了下面代碼無法用當前的解析器進行解析(會造成 SyntaxError)。
with (open("a_really_long_foo") as foo,
open("a_really_long_bar") as bar):
到此,相信大家對“Python 3.9新特性有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。