Python 3.10更新拉,5個新功能讓你寫Code效率倍增

what is new in python 3.10

Python是近年來成長最迅速的語言之一,其團隊在2021年底發佈了Python 3.10的版本,迎來了一項許多人敲碗已久的switch條件式!除此之外還有幾項讓程式碼更簡潔的改進,下面整理了5個可能比較容易會用到的特性,讓我們來看看吧!

新功能1 – 終於有switch case判斷式

如果你用習慣了C/C++等語言的Switch語句,那麼恭喜你現在Python也可以這樣寫囉。

foo = 1

match foo:
    case 1:
        print('foo is 1 ') 
    case 2:
        print('foo is 2')
    case _:
        print('foo is Known')

新功能2 – 顯示詳細的錯誤資訊

對於更入門python的人來說,原先的錯誤訊息只有指出在哪一行,而沒有說明是為什麼出現錯誤訊息,在python3.10後支援了錯誤訊息的說明,對新手來說是一大福音。

舉個例子,在這裡創建的test變數是list類型,後面的中括號忘了:

test = [1,2,3
print('Hi linnote')

原先的錯誤訊息:

File "python310_test.py", line 3
    print('test')
    ^
SyntaxError: invalid syntax

python3.10的錯誤訊息:

File "C:\Users\uhong\python310_test.py", line 1
    test = [1,2,3
           ^
SyntaxError: '[' was never closed

意思就是你的門沒關好啦!!!

新功能3 – Union可以用其他運算子代替

Python也可以像C/C++這類靜態語言一樣對Function的參數以及回傳變數做Type Hint,Type Hint的功能是透過型別註釋(Type Annotation)讓函式的輸入輸出有更好的可讀性與維護性:

def function(number: list) -> float:
    return number * 100

但如果想要同時可以接受兩種的類型的話,可以這樣寫:

import typingn import Union
def foo(num: Union[int, float]) -> Union[int, float]:
    return num * 100

而在Python 3.10的版本中就更簡潔了,只需要使用|運算子就可以囉

def foo(num: int | float) -> int | float:
    return num * 100

但其實也可以不用這麼麻煩,以下的寫法也是可行的:

def foo(num: (int, float)) -> (int, float):
    return num * 100

總而言之,要說明的就是下面兩行是等價的

Union[float, int] == int #Python 3.9以前
float | int == int #Python 3.10之後可以這樣寫

新功能4 – 較嚴謹的zip

在Python 3.10以上的版本中zip這個內建函式多了一項參數strict可以使用,目的是可以檢查兩個list的長度是否相同,舉個例子:

list1 = [apple, banana]
list2 = [1,2,3]
list(zip(list1, list2))

上面這個寫法list2多了一個元素,是不會被檢查到的,Python 3.10可以加入strict這個參數來檢查,如果兩個串列的長度不同就會噴錯,很好理解。

list1 = ['apple', 'banana']
list2 = [1,2,3]
print(list(zip(list1, list2, strict=True)))

>>>
Traceback (most recent call last):
  File "C:\Users\uhong\python310_test.py", line 3, in <module>
    print(list(zip(list1, list2, strict=True)))
ValueError: zip() argument 2 is longer than argument 1

新功能5 – with語法可以一次開多個檔案

就是…可以一次開多個檔案,厲害吧

with (open('1.txt') as foo, 
    open('2.txt') as bar):
    pass

Python 3.10小結

這裡整理了5個比較可能在寫code上面有影響的小地方,雖然除了switch語法之外感覺起來都是比較無關緊要的更新,但可以感受的到Python的團隊是可能地讓程式的寫法更簡潔、人性化也更pythonic。

如果想要看完整的Python 3.10的更新可以參考官方的Release Note

推薦閱讀

  1. 【超快速教學】如何在Docker環境內使用GPU跑Tensorflow
  2. 部署「Kubeflow」在Local Ubuntu流程紀錄及注意事項
  3. 【Python教學】使用Python Pickle把物件都儲存起來
下面的按鈕可以直接分享🐹

歡迎留言分享你/妳的看法唷,信箱不會公開😀