Python該選哪個版本

選擇困難的一些指引

當採 Python 作為程式語言, 對於入門者來說, 面對快速升級頻率, 要挑哪個版本還真有點問題. 以今年 2022 年來看, 似乎不會再有該選 Python 2 或是 Python 3 的問題. 99.9%機率都應該選 Python 3. 不過在參考一些程式碼時偶而還會看到 Python 2 的遺跡, 如果你要參考的代碼是 Phthon 2, 無論如何千萬不要偷懶, 寧可費點精神將它轉為 Python 3 語法, 因為許多工具或是套件逐漸不支持 Python 2.

決定採 Python 3, 衍生一個問題, 3.11 即將發布, 還有 3.10, 3.9, 3.8, 3.7 ... 等等, 每個版本都累加一點新語法, 有時受限於執行環境, 不得挑選某一特定版本. 那如果可自由選擇, 如何選?

以下條列我個人認為較有影響Python 3幾個版本選擇的考量點

Python 3.10

值得切換到 3.10的新特點

  1. Structural Pattern Matching, 如果苦於 if 加上一堆 elseif 是困擾, 除了 dict 機制外, 3.10 提供了解法
    不完全單單取代多數語言提供的 switch-case, 命名為match 是因為可進行樣式比對

match subject:

case <pattern_1>:

<action_1>

case <pattern_2>:

<action_2>

case <pattern_3>:

<action_3>

case _:

<action_wildcard>

  1. Allow writing union types as X | Y, 不用再辛苦 Union[Type1, Type2]

def http_error(status: str|int):

match int(status):

case 400|401|402:

return "Bad request"

case 404:

return "Not found"

case _:

return "Something's wrong with the internet"

不考慮升級用 3.10版的理由

  1. 兩大深度學習框架 PyTorch 與 TensorFlow 至今 (2022.2) 只支援到 Python 3.9

  2. 有些套件可能還沒有與 3.10 磨合好, 但是隨著時間過去將解決. 例如: 如果選用 conda (至今 2022/2/20 安裝檔是採 python 3.9) 做Python虛擬環境, 雖然可以用
    conda -n py310 python=3.10
    建立一個名為 py310 的 Python 3.10 的環境,
    但在github有人遭遇一些細部問題. 不過這應該是遲早會解決的問題

Python 3.9

雖然 3.9 並不是最新的版本, 但因為已經釋出超過一年, 各種工具與程式庫均已匹配, 應是最推薦採用的版本

值得切換到 3.9 的新特點

  1. dict合併運算 | , 衍生可以用 |= 簡化語法

dictA, dictB = {1:'a',2:'b'},{3:'c'}

dictA |= dictB

#dictA will be {1: 'a', 2: 'b', 3: 'c'}

  1. 字串移除前綴和和綴的方法

urls=['http://a.com','http://b.com','http://c.com']

for url in urls:

dn=url.removeprefix('http://')

cn=dn.removesuffix('.com')

print(dn,cn)

Python 3.8

值得切換到 3.8 的新特點

  1. 可以 := 在運算中給予變量值

name='My name is not readable'

for i in range(n := len(name)):

if n<10:

print(name[i], end = ',')

else:

print('Too long name')

  1. f-strings support = for self-documenting expressions and debugging

name='My name is not readable'

print(f'Length of {len(name)=}')

#result: Length of len(name)=23