App下載

對新手更加友好的python來了!——python3.10新特性介紹

steven 2021-10-11 14:18:37 瀏覽數(shù) (4091)
反饋

關(guān)于python版本更新的內(nèi)容,現(xiàn)在有了一個明確的發(fā)行計劃,在去年的十月份,python3.10的一些新特性被提出。而今天,我們已經(jīng)可以安裝正式版python來體驗(yàn)這些新特性了。這些新特性包括:類型注釋的進(jìn)一步拓展,延遲類型注釋的執(zhí)行,類型注釋聯(lián)合操作符,帶括號的上下文管理器,顯式類型別名,加強(qiáng)版的Switch-case(python中叫match-case)語句,更友好的報錯提示等。棄用了distutils 等內(nèi)容。詳細(xì)的內(nèi)容可以前往python官網(wǎng)查看相關(guān)文檔,這里小編主要介紹它是如何對新手更加友好的。

更友好的報錯提示

很多編程語言都有一套自己的報錯機(jī)制,就小編的學(xué)習(xí)經(jīng)歷而言,python的報錯提示是比較友好的。小編學(xué)習(xí)的第一門語言是C語言,當(dāng)時使用的是一代經(jīng)典IDE——visual C++6.0,它在編譯的時候如果代碼有錯誤會進(jìn)行報錯,小編覺得vc6.0的報錯是十分詳細(xì)的,我們只需要根據(jù)報錯的提示信息進(jìn)行修改,就能把代碼改好,VC6.0的優(yōu)點(diǎn)就在于此:他的代碼提示很詳細(xì)。然而因?yàn)樗荂語言,所以本身代碼會比較難懂,這點(diǎn)不能賴它的報錯提示,只能說C語言的報錯提示像一把高手才能駕馭的寶劍,對于初學(xué)C語言,對C語言語法不夠熟悉的小伙伴不太友好。

小編學(xué)習(xí)的第二門語言是java,java的報錯實(shí)際上和python很相似,他們的報錯都會將調(diào)用棧打印出來,我們可以順著調(diào)用棧去一層一層的找到最終錯誤的地方,python的報錯提示也是比較詳細(xì)的。但是有編譯過程的語言有一個共同的缺點(diǎn):會將所有的錯誤都報出來。原因在于他們在編譯的時候是通篇代碼進(jìn)行編譯的,而不是想python一樣逐行解釋,他們會將整篇代碼的錯誤統(tǒng)統(tǒng)都找出來,如果代碼錯誤較少,這樣的報錯無傷大雅,但對于新手而言,可能寫一個helloworld就能爆出七八個錯誤,在java里七把個報錯打印出來的報錯提示可以有一大頁,里面還充斥著各種令人看不懂的包,新手看了直接莫名其妙。

接下來就是python,在之前版本的python報錯中,其實(shí)類似于java,但是他有兩點(diǎn)不同。第一,他比較簡略,只給出了錯誤的原因,比如簡單的提示語法錯誤。這對于其他報錯來說是一個缺點(diǎn)。第二,由于python逐行解釋的特點(diǎn),就算一篇代碼有很多錯誤,python也只會一個一個的報錯,而不是像編譯型語言一樣一次全部報出來,這點(diǎn)對于報錯的易讀性而言算是一個優(yōu)點(diǎn)。

但是今天我們要介紹的,是python3.10,更新后的python報錯,解決了之前的缺點(diǎn),現(xiàn)在python報錯也能更加詳細(xì)了,來看看現(xiàn)在的python報錯:

str = "未閉合的str

File "d:\projects\python\learn\Py310探索.py", line 90
    str = "未閉合的str
          ^
SyntaxError: unterminated string literal (detected at line 90)
arr = [1, 2, 2, 3

  File "d:\projects\python\learn\Py310探索.py", line 91
    arr = [1, 2, 2, 3
          ^
SyntaxError: '[' was never closed

類型注釋

喜歡python的小伙伴有一些是青睞他的動態(tài)變量,我們無需聲明變量的類型就可以引用,這個變量上一秒還是int型的,下一秒就變成float了,這一切全憑我的意愿。但這實(shí)際上會帶來兩個問題,對于解釋器而言,要處理這些動態(tài)類型需要解釋器去猜測這個變量的類型,在運(yùn)算的時候好及時轉(zhuǎn)換,這會降低解釋器的效率。對于程序員而言,有變量類型的函數(shù)我們不需要看函數(shù)內(nèi)部代碼就能知道這個函數(shù)傳進(jìn)去的參數(shù)是什么類型,返回的又是什么類型。而這一點(diǎn)在老版本的python中做不到。老版本的Python中我們需要看完這個函數(shù)的代碼才能去猜測傳入?yún)?shù)和返回值的類型(看起來像是重復(fù)解釋器遇到的困境,但實(shí)際上困擾解釋器的問題也困擾著我們),一個函數(shù)的代碼量如果較少且容易理解,或者帶有注釋,對我們帶來的影響可能沒那么大,但當(dāng)寫代碼的人不寫注釋且函數(shù)復(fù)雜難懂的時候那就是一場災(zāi)難。

在新版本的python中來了類型注釋,這樣可以明顯地提高代碼的可讀性。小編認(rèn)為這也是提高python易學(xué)性的一個關(guān)鍵。

def f(x: int | float) -> float:
    return x * 3.142
f(1)  # pass
f(1.5)  # pass
f('str')  # linter will show annotation error

類似上面這樣,傳入的參數(shù)可能是int也可能是float,雖然這部分內(nèi)容是來自類型注釋聯(lián)合操作符的,但也能看到類型注釋相關(guān)的內(nèi)容。

小結(jié)

python3.10更新了很多有趣的東西,python也因此變得更加易于學(xué)習(xí),現(xiàn)在正是學(xué)習(xí)python的好時機(jī),小伙伴們趕快來學(xué)習(xí)python吧


2 人點(diǎn)贊