自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

看完 Python3.10 的新特性,我決定仍不更新

開發(fā) 后端
Python3.10 在 2021 年的 10 月 3 號發(fā)布,目前已經(jīng)過去 1 個月了,關(guān)于它的新特性相信大家已經(jīng)有所耳聞,不過我決定仍然不更新,目前我在用的版本是 Python3.8,沒有任何不爽。下面說一說我不更新的理由。

 [[433181]]

Python3.10 在 2021 年的 10 月 3 號發(fā)布,目前已經(jīng)過去 1 個月了,關(guān)于它的新特性相信大家已經(jīng)有所耳聞,不過我決定仍然不更新,目前我在用的版本是 Python3.8,沒有任何不爽。下面說一說我不更新的理由。

第一、相關(guān)的庫可能還未跟進(jìn)

如果你更新到了最新版本,已有的代碼能否在不修改的情況下仍然可以正常運(yùn)行?是首先要考慮的問題。

Python 的第三方庫都是基于開源志愿者的勞動,他們免費(fèi)做著非常有價值的工作,而且適配新的 Python 版本都需要時間。此外,由于升級涉及許多不同的群體,協(xié)調(diào)和發(fā)布需要更多時間。

第二、很多新特性沒使用價值

盤點(diǎn)一下 Python3.10 的那些沒什么用的新特性(個人觀點(diǎn),可以留言來噴):

1、with 可以加括號了

比如:

  1. with ( 
  2.     CtxManager1() as example1, 
  3.     CtxManager2() as example2, 
  4.     CtxManager3() as example3, 
  5. ): 
  6.     ... 

這一點(diǎn),我基本用不到,也不清楚什么樣的情況需要這樣寫。要是有多個上下文,我就串著多寫幾個就是了,要是 example1 和 example2 有關(guān)系,我可以嵌套:

  1. with CtxManager1() as example1: 
  2.     with CtxManager2() as example2: 
  3.         ... 
  4.     ... 

這樣寫不是層次更清晰嗎?

2、match case 就是花花腸子

Python3.10 新增了 match 和 case 軟關(guān)鍵字。什么是軟關(guān)鍵字?就是雖然是關(guān)鍵字,但是可以作為變量名,雖然如此,你肯定也不愿意讓 match 成為你的變量名了,因?yàn)檫@樣也是不會報錯的:

match match: #后一個 match 是變量名稱

  1. match match: #后一個 match 是變量名稱 
  2.     case case
  3.         <action

3.10 的 match case 的語法如下:

  1. match subject: 
  2.     case <pattern_1>: 
  3.         <action_1> 
  4.     case <pattern_2>: 
  5.         <action_2> 
  6.     case <pattern_3>: 
  7.         <action_3> 
  8.     case _: 
  9.         <action_wildcard> 

它的用法可多了,有些我都快看不懂了。比如先來個簡單的:

  1. def match_errno(errno): 
  2.     match errno: 
  3.         case 0: 
  4.             pass 
  5.         case 1: 
  6.             pass 
  7.         case 42: 
  8.             print("42!"
  9.         case _: 
  10.             print("wildcard"

這里有個 _ 表示誰也不匹配的情況,相當(dāng)于一個默認(rèn)值,但是 _ 本來是用來表示一個后續(xù)不再使用的變量的,假如這樣調(diào)用,雖然解釋的通,總感覺怪怪的:

  1. >>> _ = 42 
  2. >>> match_errno(_) 
  3. 42! 

再來個復(fù)雜一點(diǎn)的:

  1. def command_split(command): 
  2.     match command.split(): 
  3.         case ["make"]: 
  4.             print("default make"
  5.         case ["make", cmd]: 
  6.             print(f"make command found: {cmd}"
  7.         case ["restart"]: 
  8.             print("restarting"
  9.         case ["rm", *files]: 
  10.             print(f"deleting files: {files}"
  11.         case _: 
  12.             print("didn't match"

我乍一看覺得這代碼有問題,cmd 和 files 是未定義的變量啊,卻可以用在 case 的表達(dá)式里面,實(shí)際運(yùn)行卻是沒問題的:

  1. command_split("make"
  2. command_split("make clean"
  3. command_split("restart"
  4. command_split("rm a b c"
  5.  
  6. default make 
  7. # make command found: clean 
  8. # restarting 
  9. # deleting files: ['a''b''c'

匹配后剩余的部分可以變成一個變量,不得不服還可以這樣用。

再看一個:

  1. def match_capture_subpattern(command): 
  2.     match command.split(): 
  3.         case ["go", ("north" | "south" | "east" | "west"as direction]: 
  4.             print(f"going {direction}"

你看還能結(jié)合 as 使用。牛逼不牛逼?

最后再看一個:

  1. match point: 
  2.     case Point(x, y) if x == y: 
  3.         print(f"The point is located on the diagonal Y=X at {x}."
  4.     case Point(x, y): 
  5.         print(f"Point is not on the diagonal."

case 里面還可以再用 if,牛逼不牛逼?

這些花樣招式,除了增加程序員的心智負(fù)擔(dān),能有啥好處?我簡簡單單的 if elif 就搞定了,可讀性還高。再說了這 match 并性能上的提升,甚至有時候還更慢,何苦呢?

Python 為什么一開始就沒有 match,現(xiàn)在都 2021 年了,你新增個 match,是忘了初心嗎?

3、新的類型提示,笑死我了

Python3.9 這樣寫的:

  1. from typing import Union 
  2. a: Union[int, str] = 1 

Python3.10 可以這樣寫:

  1. a: str | int = 1 

講真,即使你換成 |,我也不大可能會用。類型提示是學(xué)習(xí)人家靜態(tài)語言的優(yōu)勢,提示程序的可讀性和可維護(hù)性,修改代碼時別傳錯了變量類型。

何況 Python 解釋器根本不檢查類型提示是否有錯誤,純屬自娛自樂:

  1. >>> def fun(x :int) -> str: 
  2. ...     return x 
  3. ... 
  4. >>> print(fun('asf')) 
  5. asf 
  6. >>> 

如果一個變量可以有很多類型,還提示個屁啊?提示的多了,還不如不提示,本來就是動態(tài)語言嘛。自己玩自己,搞笑吧,哈哈哈哈。

我用類型提示最多就用一個類型,要是超過一個類型,我就不提示?;蛘咦约盒薷拇a,用得著那么多類型么?

第三、還不是很穩(wěn)

Python 3.9.0 于 2020 年 10 月發(fā)布。3.9.1 于 2 個月后發(fā)布,其中包含一長串錯誤修正。同樣的,Python3.10.x 也可能會有一些錯誤修正,讓它再飛一會兒。

Python 3.10 有了新的語法:match-case,但是一些格式化工具或 IDE 可能還不支持。即使支持,你需要升級他們。

總之 Python3.10.0 才一個月,還不是很穩(wěn)。

那你可能會問了,什么時候算穩(wěn)?

我覺得比最新版本低 1-2 個是最好的選擇,比如 Python3.10 發(fā)布了,那么可以考慮升級到 Python3.8 或 Python3.9,因?yàn)榇藭r這些版本已經(jīng)足夠穩(wěn)定。

另一方面,除非你用的版本宣告了不支持安全更新的時間,或者報告了 bug,否則,你可以一直不更新。比如說,Python 3.6 將在 2021 年 12 月結(jié)束安全更新,此時應(yīng)該升級到 Python3.7 或以后的版本。

最后的話

基于以上三點(diǎn),我決定不會更新 Python3.10。當(dāng)然,Python3.10 也有比較好的新特性,比如更友好的報錯提示,當(dāng)你的括號、引號未閉合時,會拋出更加清晰明了的錯誤。

很喜歡 Python 之禪的那兩句:簡單勝過復(fù)雜,明確優(yōu)于隱晦。希望 Python 的更新也能保持 Python 之禪的初心。

 

責(zé)任編輯:武曉燕 來源: Python七號
相關(guān)推薦

2021-06-23 09:46:16

Python 3.10結(jié)構(gòu)模式管理器

2021-10-08 15:55:52

Python模塊開發(fā)

2013-05-17 09:24:50

LinuxLinux 3.10

2021-10-27 10:15:25

Python新特性編程語言

2020-11-27 18:06:36

Python 開發(fā)編程語言

2021-10-11 14:32:08

PythonPython 3.10編程語言

2020-07-03 09:55:28

Python 開發(fā)編程語言

2021-04-20 19:23:07

語法switch-casePython

2022-10-31 08:24:24

UbuntuLinux

2022-01-27 08:58:13

Python新版本特性

2022-07-14 08:22:48

Computedvue3

2022-08-02 11:31:46

Python語法代碼

2011-05-30 10:32:11

光纖拉絲張力

2021-06-16 07:56:48

C++新特性類型

2009-02-04 17:33:24

ibmdwPython

2022-09-22 09:24:01

架構(gòu)改造

2017-07-21 09:48:34

SnackBarToastGoogle

2021-07-15 06:47:56

微信iOS 8.0.8消息提示音

2023-12-13 13:23:21

GPUPandas

2023-11-08 08:42:23

Python語法機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號