成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

開(kāi)發(fā) 后端
是不是感覺(jué)python3.7剛剛使用,3.8還沒(méi)捂熱乎,怎么3.9這么快就來(lái)了!其實(shí)版本迭代速度快,說(shuō)明這門編程語(yǔ)言的活力強(qiáng),對(duì)于我們使用者來(lái)說(shuō)是件好事,而且誰(shuí)也沒(méi)說(shuō)必須使用最新版本,我到現(xiàn)在仍然在用python3.6。但是呢,新版本出來(lái)了一定要體驗(yàn)一下。

[[283584]]

是不是感覺(jué)python3.7剛剛使用,3.8還沒(méi)捂熱乎,怎么3.9這么快就來(lái)了!其實(shí)版本迭代速度快,說(shuō)明這門編程語(yǔ)言的活力強(qiáng),對(duì)于我們使用者來(lái)說(shuō)是件好事,而且誰(shuí)也沒(méi)說(shuō)必須使用最新版本,我到現(xiàn)在仍然在用python3.6。但是呢,新版本出來(lái)了一定要體驗(yàn)一下,看看都有哪些改動(dòng)和優(yōu)化,說(shuō)不定哪個(gè)新特性就能解決你手里的大問(wèn)題。

1 新的特性

1).import異常

我們?cè)谶M(jìn)行模塊的相對(duì)引用時(shí),可能會(huì)遇到這個(gè)錯(cuò)誤提示:ValueError: Attempted relative import beyond toplevel package。簡(jiǎn)單來(lái)說(shuō)這個(gè)問(wèn)題是由于引用的模塊超出了頂層目錄的層級(jí)結(jié)構(gòu)所導(dǎo)致的,這個(gè)問(wèn)題不理解也沒(méi)關(guān)系,因?yàn)楦鷓ython3.9的特性更改關(guān)系不大。

我們只要知道,python3.9中對(duì)這類錯(cuò)誤的raise類型進(jìn)行了調(diào)整,當(dāng)遇到這類錯(cuò)誤的時(shí)候,會(huì)提示ImportError而不再是ValueError,PR如圖所示:

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

這個(gè)改動(dòng)的最大好處就是當(dāng)遇到這類問(wèn)題時(shí),系統(tǒng)會(huì)明確告訴你是由import模塊引發(fā)的。

2).__file__路徑

我們知道,在python中可以使用__file__、sys.argv[0]、sys.path[0]等方法獲取當(dāng)前腳本的所在路徑,只不過(guò)在命令行模式下使用前兩個(gè)命令獲取到的都是相對(duì)路徑,只有第三個(gè)命令可以獲取腳本的絕對(duì)路徑。我們用以前版本的的python運(yùn)行下面這段代碼:

  1. import sys 
  2. print(__file__) 
  3. print(sys.argv[0]) 
  4. print(sys.path[0]) 

得到結(jié)果如下:

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

而如果使用python3.9來(lái)運(yùn)行結(jié)果就不一樣了(下圖),他對(duì)__file__和sys.argv[0]都做了調(diào)整,使其返回值全部為絕對(duì)路徑。

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

3).replace修復(fù)

replace是字符串處理中的常用函數(shù),他的原型其實(shí)是這樣的:

  1. str.replace(old, new[, max]) 

其中max是可選參數(shù),意思是替換不超過(guò)max次。但是在之前的python版本中,如果對(duì)空值進(jìn)行這種形式的替換會(huì)有一點(diǎn)問(wèn)題,例如下面這段代碼,它的輸出結(jié)果仍然為空。

  1. s = '' 
  2. s = s.replace('''python39', 1) 
  3. print(s) 

而在python3.9中對(duì)這一問(wèn)題進(jìn)行了修正,除非max賦值為0,否則會(huì)進(jìn)行正常的替換操作。這一改動(dòng)對(duì)bytes和bytearray對(duì)象同樣適用。

2 模塊改動(dòng)

Python3.9并沒(méi)有為我們帶來(lái)新的內(nèi)置模塊,但是對(duì)一些模塊進(jìn)行了修改,我們挑選幾個(gè)使用相對(duì)較多的進(jìn)行說(shuō)明。

1).ast

ast這個(gè)概念大家可能比較陌生,一般來(lái)說(shuō)我們很少有機(jī)會(huì)用到它,我們只需要知道ast對(duì)象是類似一種樹(shù)形的語(yǔ)法結(jié)構(gòu)。來(lái)看下面這段代碼,他的作用就是把print(3+5)轉(zhuǎn)換成ast對(duì)象并打印。

  1. import ast 
  2. func_def = 'print(3+5)' 
  3. r_node = ast.parse(func_def) 
  4. print(ast.dump(r_node)) 

先使用之前的版本來(lái)運(yùn)行,看看下圖中的輸出結(jié)果。我們不用看內(nèi)容,單從輸出格式而言,這串代碼既沒(méi)有換行也沒(méi)有縮進(jìn),看起來(lái)很費(fèi)勁。

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

而python3.9則對(duì)這一問(wèn)題進(jìn)行了解決,它在dump()方法中新增了一個(gè)參數(shù) indent,代表的是首行縮進(jìn)的字符長(zhǎng)度,我們對(duì)上述代碼進(jìn)行少許修改:

  1. import ast 
  2. func_def = 'print(3+5)' 
  3. r_node = ast.parse(func_def) 
  4. print(ast.dump(r_node, indent=2)) 

然后用python3.9來(lái)運(yùn)行,結(jié)果如下,這次看起來(lái)是不是舒服多了。

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

2).asyncio

在python3.9中,新增了一個(gè)名為shutdown_default_executor()的協(xié)程,它的作用就是等待ThreadPoolExecutor中的所有線程執(zhí)行完畢,為默認(rèn)線程安排關(guān)閉時(shí)間。

需要注意的是,調(diào)用此方法后,如果在默認(rèn)線程中調(diào)用loop.run_in_executor()方法,將會(huì)引發(fā)RuntimeError。

此外,如果我們使用了asyncio.run()類的方法,那么shutdown_default_executor()將會(huì)自動(dòng)調(diào)度。也就是說(shuō),對(duì)于asyncio的一般使用者來(lái)說(shuō),python3.9的改變并不會(huì)帶來(lái)什么實(shí)質(zhì)性影響。

3).threading

我們知道,在python的子解釋器中是不支持守護(hù)線程的,在之前的版本中,如果一個(gè)線程是從子解釋器中調(diào)用的守護(hù)線程,那么將會(huì)導(dǎo)致python程序的崩潰。

在python3.9中,遇到這種情況會(huì)引發(fā)RuntimeError,這相當(dāng)于對(duì)整個(gè)程序加了一層保護(hù)。

4).pprint

Python3.9對(duì)pprint的修改主要體現(xiàn)在增加了對(duì)types.SimpleNamespace的支持。types.SimpleNamespace嚴(yán)格來(lái)說(shuō)是一個(gè)簡(jiǎn)單的對(duì)象子類,為了便于理解我們可以簡(jiǎn)單地把他看作一個(gè)數(shù)據(jù)結(jié)構(gòu)。

下面我就來(lái)看看在之前的版本和python3.9中,對(duì)types.SimpleNamespace的數(shù)據(jù)進(jìn)行pprint結(jié)果有什么不同,先來(lái)看一段代碼:

  1. import pprint 
  2. from types import SimpleNamespace 
  3. K = [str(i) for i in range(10)] 
  4. L = [str(i)*20 for i in range(10)] 
  5. D = dict(zip(K, L)) 
  6. sn = SimpleNamespace(**D) 
  7. pp = pprint.PrettyPrinter(indent=4) 
  8. pp.pprint(sn) 

其中變量sn返回的是一個(gè)命名空間,其結(jié)構(gòu)類似于一個(gè)dict字典,來(lái)看用之前版本的python運(yùn)行腳本的輸出結(jié)果:

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

再來(lái)看python3.9中使用pprint的輸出結(jié)果(下圖),這下知道區(qū)別在哪了吧。

 

還在擼Python3.7,Python3.9新鮮出爐,帶你嘗鮮解讀

此外,python3.9中還對(duì)其他幾個(gè)模塊進(jìn)行了修改,例如venv、os等,不過(guò)有些改動(dòng)只針對(duì)特定操作系統(tǒng)(比如linux),這里不再一一羅列了。

3 其他優(yōu)化

除了上面提到的一些改動(dòng),python3.9還對(duì)一些比較底層的東西進(jìn)行了優(yōu)化,這部分內(nèi)容我想大多數(shù)python使用者都涉及不到,大家了解下就好。

1).Build和C API

  • 提供Py_EnterRecursiveCall()和Py_LeaveRecursiveCall()作為limited API的常規(guī)函數(shù)。從stable API中刪除_Py_CheckRecursionLimit。
  • 向C API添加一個(gè)新的公共函數(shù)PyObject_CallNoArgs(),這個(gè)函數(shù)可以調(diào)用不含參數(shù)的可調(diào)用Python對(duì)象。
  • 全局變量PyStructSequence_UnnamedField在python3.9中修改為常量字符串。
  • 從Py_LIMITED_API.pyfpe.h中剔除PyFPE_START_PROTECT()和PyFPE_END_PROTECT()函數(shù)。
  • 刪除PyMethod_ClearFreeList()和PyCFunction_ClearFreeList()函數(shù)。

2).方法調(diào)整

  • 在之前的版本中,math.factorial()函數(shù)只接受非負(fù)整數(shù)值,否則將引發(fā)ValueError。在python3.9中該函數(shù)將棄用,任何參數(shù)都將引發(fā)TypeError。
  • 棄用parser模塊,并將在以后的Python版本中刪除。
  • 修改random模塊的seeds類型,今后只支持None,int,float,str,bytes和bytearray類型。
  • 始終允許打開(kāi)GzipFile文件進(jìn)行讀寫,即使不指定mode參數(shù)也不會(huì)發(fā)出警告。
  • 推薦使用_tkinter.TkappType的splitlist()方法代替split()方法。

3).移除模塊

  • collection.abc 里面的抽象基類將不在常規(guī)的 collection 模塊中公開(kāi)。
  • 刪除 sys.getcheckinterval() 和 sys.setcheckinterval() 函數(shù)。
  • 刪除threading.Thread 的 isAlive() 方法。
  • 刪除 ElementTree 中的getchildren() 和 getiterator()方法。
  • 刪除 舊 plistlib 模塊的實(shí)現(xiàn),同時(shí)刪除其中的use_builtin_types 參數(shù)。

小結(jié):

總的來(lái)說(shuō),目前python3.9相對(duì)于3.8改變并不是很大,而且大多數(shù)都是一些偏底層的東西,我們一般用戶很少會(huì)碰到。不過(guò),目前推出的python3.9.0a1只是第一個(gè)迭代版本,并不是正式版本。后續(xù)也有可能會(huì)有其他變動(dòng),但是按理說(shuō)變化也不會(huì)太大。基于以上原因,個(gè)人認(rèn)為大家可以繼續(xù)使用現(xiàn)有的版本學(xué)習(xí)和工作,如果你現(xiàn)在的版本不算很老的話。

責(zé)任編輯:未麗燕 來(lái)源: 菜鳥(niǎo)學(xué)Python
相關(guān)推薦

2013-11-14 10:34:57

Android 4.4特性

2012-04-26 10:56:05

jQuery效果

2013-05-09 10:30:44

開(kāi)源軟件開(kāi)源項(xiàng)目

2019-03-15 15:37:51

自動(dòng)駕駛排名企業(yè)

2010-08-02 11:09:45

Flex4

2011-11-21 11:27:30

品牌營(yíng)銷

2015-04-13 18:29:54

H3 BPM

2013-04-11 13:59:39

2009-09-08 13:46:13

CCNA中文版

2010-08-12 14:23:05

Flexbuilder

2021-10-16 07:15:40

勒索軟件攻擊數(shù)據(jù)泄露

2018-08-08 05:38:12

云計(jì)算云服務(wù)

2012-12-21 10:32:42

網(wǎng)易電影票客戶端

2011-05-19 17:00:56

Web框架

2012-09-26 09:26:21

2013-04-18 15:42:35

OS X 10.8.4

2015-08-24 16:12:08

DefCon黑客大會(huì)CTF決賽

2023-07-27 18:33:08

Go薪資JS
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日本不卡视频 | 成人国产在线视频 | 91精品国产色综合久久 | 欧美日韩国产中文字幕 | 亚洲精品一区二区三区蜜桃久 | 日本特黄a级高清免费大片 成年人黄色小视频 | 日韩在线资源 | 中文成人无字幕乱码精品 | 亚洲91精品 | 高清一区二区三区 | 丝袜一区二区三区 | 99精品视频网 | 午夜一区 | 91资源在线| 特黄色一级毛片 | 久久综合九九 | 青青久久 | 午夜视频精品 | 手机在线一区二区三区 | 免费看黄视频网站 | 国产一区不卡 | 男人天堂网站 | 草久久久 | 四虎影院在线播放 | 国产成人黄色 | 性色视频 | 日韩精品视频在线 | 亚洲高清在线观看 | 亚洲天堂成人在线视频 | 成人激情视频在线观看 | 毛片一区二区三区 | 老牛嫩草一区二区三区av | 一级片av| 国产一级淫片免费视频 | 精品一区二区三区在线观看国产 | 日韩精品在线观看视频 | 蜜臀久久99精品久久久久野外 | 91.com视频| 久久精品国产99国产精品 | 日本一二区视频 | 久草视频在线播放 |