一分鐘帶你瞭解Python 3.8 八大重要新特性

一分鐘帶你瞭解Python 3.8 八大重要新特性

點擊上方一鍵關注


01

賦值表達式


這個新的運算符 := 被稱為海象運算符,因為 := 很像小眼睛長牙齒的海象。它能讓你把一行語句中的某一個表達式賦值給一個變量,同時不影響該語句的原始邏輯。這應該是 Python 3.8 中被人討論最多的一個新功能了。可以看下面的例子:


賦值語句 a := 1+3 將 1+3 賦值給了 a,同時又讓 a 參與了布爾運算 a== 4:


if (a := 1+3) == 4:

print(a)

# 4


在python之前的版本是不能在邏輯運算時直接賦值的

一分鐘帶你瞭解Python 3.8 八大重要新特性

這樣的賦值語句可以讓你的代碼更加緊湊,同時保持良好的可讀性。但注意不要濫用它。


02

參數類型


在 Python 中,一個函數可以接受兩種不同方式指定的參數:


  • 位置參數:按其傳入的順序賦值給對應位置的參數;
  • 關鍵字參數:依據給定的關鍵字賦值給對應的參數。


在下面這個例子中,函數內 ab

兩個參數的值分別按照位置參數和關鍵字參數的方式進行指定,十分靈活。


一分鐘帶你瞭解Python 3.8 八大重要新特性


新版本的 Python 3 提供了一個額外的語法糖,用來指明某些參數必須使用僅限位置而非關鍵字參數的形式。具體用法為使用 / 和 * 符號對參數列表進行分隔。

*注:後面的“*”語法並不是 Python 3.8 裡新增的。

python3.6

一分鐘帶你瞭解Python 3.8 八大重要新特性


在下面的例子中,/ 前的參數只能用位置參數,/和*中間的參數可以任意使用關鍵字或位置方式指定,* 後的參數 e 和 f 只能用關鍵字參數。


一分鐘帶你瞭解Python 3.8 八大重要新特性


為什麼需要限制這種靈活性呢?如果你的參數名沒有什麼意義,或者是隨便取的(比如 a、b、i、j 這樣),那你應該排除使用關鍵字傳遞的方式,免得未來你重構或是修改這個函數的時候,改動參數的變量名稱會讓其他調用代碼出錯。這樣就能讓你的代碼更加的穩定健壯。


03

f-strings 支持等號


Python 的 f 字符串是一個創舉。它使你可以用優雅易懂的方式格式化輸出包含表達式的字符串。它的基本語法是 f'{expr}' ,其中需要計算的表達式被大括號括起來,在字符串引號的前面,用字母 f 進行標記。


本次更新給 f 字符串帶來了一個新的格式化標記:等號“=”。在 f 字符串裡,等號跟在表達式的末尾,語法為:f'{expr=}',輸出的字符串將包含變量名稱和其對應的值,如下面這個例子所示:


python3.6

一分鐘帶你瞭解Python 3.8 八大重要新特性


python3.8

一分鐘帶你瞭解Python 3.8 八大重要新特性

這樣,在調試時,我們就能方便簡潔地打出變量的值.


04

反向迭代字典—reversed


Python3.6中重寫了字典,其使用了PyPy項目貢獻的一個新實現。除了更快、更緊湊之外,現在的字典還會繼承元素的順序——元素會按照添加的順序排列,就像列表一樣。Python 3.8增加了,允許在字典上使用reversed()。


05


多進程共享內存

在Python 3.8中,multiprocessing模塊提供了SharedMemory類,可以在不同的Python進程之間創建共享的內存區域。

在舊版本的Python中,進程間共享數據只能通過寫入文件、通過網絡套接字發送,或採用Python的pickle模塊進行序列化等方式。共享內存提供了進程間傳遞數據的更快的方式,從而使得Python的多處理器和多內核編程更有效率。

共享內存片段可以作為單純的字節區域來分配,也可以作為不可修改的類似於列表的對象來分配,其中能保存數字類型、字符串、字節對象、None對象等一小部分Python對象。


06

在 finally 中使用 Continue


由於在實現中存在問題,之前在 finally 子句中不允許使用 continue 語句。在 Python 3.8 中這個限制已經被取消了。


一分鐘帶你瞭解Python 3.8 八大重要新特性


07

Typing模塊的改進


Python是動態類型語言,但可以通過typing模塊添加類型提示,以便第三方工具驗證Python代碼。Python 3.8給typing添加了一些新元素,因此它能夠支持更健壯的檢查:

  • final修飾器和Final類型標註表明,被修飾或被標註的對象在任何時候都不應該被重寫、繼承,也不能被重新賦值。
  • Literal類型將表達式限定為特定的值或值的列表(不一定是同一個類型的值)。
  • TypedDict可以用來創建字典,其特定鍵的值被限制在一個或多個類型上。注意這些限制僅用於編譯時確定值的合法性,而不能在運行時進行限制。


08

新版本的pickle協議


Python的pickle模塊提供了一種序列化和反序列化Python數據結構或實例的方法,可以將字典原樣保存下來供以後讀取。不同版本的Python支持的pickle協議不同,而最新版本的支持範圍更廣、更強大、更有效的序列化。

Python 3.8引入的第5版pickle協議可以用一種新方法pickle對象,它能支持Python的緩衝區協議,如bytes、memoryviews或Numpy array等。新的pickle避免了許多在pickle這些對象時的內存複製操作。

NumPy、Apache Arrow等外部庫在各自的Python綁定中支持新的pickle協議。新的pickle也可以作為Python 3.6和3.7的插件使用,可以從PyPI上安裝。


一分鐘帶你瞭解Python 3.8 八大重要新特性

一分鐘帶你瞭解Python 3.8 八大重要新特性



分享到:


相關文章: