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

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
推薦閱讀
- 【超快速教學】如何在Docker環境內使用GPU跑Tensorflow
- 部署「Kubeflow」在Local Ubuntu流程紀錄及注意事項
- 【Python教學】使用Python Pickle把物件都儲存起來