(一)首先是第一個(gè)f格式化字符串,之前基礎(chǔ)篇講過,我們可以通過f和{}來作為格式化字符串的占位符,比如:
或者使用占位符描述長度和保留位數(shù),比如:
(二)然后是數(shù)字下劃線,數(shù)字使用下劃線可以方便閱讀,不影響原有類型,比如:
對于16進(jìn)制,8進(jìn)制,二進(jìn)制也是可以的
字符串format方法也支持了“_”的選項(xiàng),當(dāng)格式化為浮點(diǎn)數(shù)或整數(shù)時(shí),以3位分隔,當(dāng)格式化為二進(jìn)制,八進(jìn)制,十六進(jìn)制時(shí),以4位分隔
(三)變量注釋沒有給變量帶來特殊的意義,只是為了方便IDE做類型檢查
只是起注釋作用,實(shí)際意義不大
(四)異步生成器在Python3.5中,協(xié)程函數(shù)await和yield不能再同一個(gè)函數(shù)中使用,但是Python3.6已經(jīng)取消了這個(gè)限制,可以在同一個(gè)函數(shù)體中使用了
1.await是一個(gè)關(guān)鍵字,只能在協(xié)程函數(shù)中使用,在遇到IO操作時(shí)暫停當(dāng)前協(xié)程(任務(wù))。
2、在暫停當(dāng)前協(xié)程(任務(wù))的過程中,事件循環(huán)可以執(zhí)行其他協(xié)程(任務(wù)),在當(dāng)前協(xié)程的IO處理完成后,可以再次切換執(zhí)行的代碼。
使用方法
await + 可等待對象(協(xié)程對象、Future對象、Task對象)
例如:
import asyncio
async def func():
print("執(zhí)行協(xié)程函數(shù)內(nèi)部代碼")
# 遇到IO操作掛起當(dāng)前協(xié)程(任務(wù)),等IO操作完成之后再繼續(xù)往下執(zhí)行。
# 當(dāng)前協(xié)程掛起時(shí),事件循環(huán)可以去執(zhí)行其他協(xié)程(任務(wù))。
response = await asyncio.sleep(2)
print("IO請求結(jié)束,結(jié)果為:", response)
result = func()
asyncio.run(result)
現(xiàn)在生成器和協(xié)程函數(shù)可以共用了,比如:
(五)增加在list、set和dict的列表推導(dǎo)和生成表達(dá)式中使用async for,async/await 是python3的新特性,可以進(jìn)行協(xié)程運(yùn)行。個(gè)人將他理解成多線程
使用異步推導(dǎo)式之后,可以簡寫成
result = [i async for i in liyou() if i % 3]
現(xiàn)在也支持在所有的推導(dǎo)式中使用await表達(dá)式
result = [await liyou() for liyou in liyous]
(六)增加了一個(gè)新的模塊:secrets。該模塊用來生成一些安全性更高的隨機(jī)數(shù),用于管理passwords, account authentication, security tokens, 以及related secrets等數(shù)據(jù),因?yàn)閜ython(大部分解析器是cpython,底層隨機(jī)化是隨機(jī)數(shù),可以通過種子判斷出隨機(jī)規(guī)律,使用secrets解決了這個(gè)問題,使得安全性得到了提高)。
(七)其他
新的堆內(nèi)存分配環(huán)境變量允許開發(fā)者設(shè)置內(nèi)存分配器,以及注冊debug鉤子等。
asyncio模塊更加穩(wěn)定、高效,并且不再是臨時(shí)模塊,其中的API也都是穩(wěn)定版的了。
typing模塊也有了一定改進(jìn),并且不再是臨時(shí)模塊。
datetime.strftime 和 date.strftime 開始支持ISO 8601的時(shí)間標(biāo)識符%G, %u, %V。
hashlib 和 ssl 模塊開始支持OpenSSL1.1.0。
hashlib模塊開始支持新的hash算法,比如BLAKE2, SHA-3 和 SHAKE。
Windows上的 filesystem 和 console 默認(rèn)編碼改為UTF-8。
json模塊中的 json.load() 和 json.loads() 函數(shù)開始支持 binary 類型輸入。
Python3.7
1、內(nèi)置函數(shù)breakpoint()
2、類型和注解
3、新增dataclasses模塊
4、生成器異常處理
5、開發(fā)模式
6、高精度時(shí)間函數(shù)
7、新特性
(一)使用breakpoint()可以方便我們使用pdb調(diào)試python代碼,在 pdb 提示符下,我們可以調(diào)用locals()來查看當(dāng)前的本地作用域的所有變量,找到問題所在地方。
(二)類型和注解,和變量注釋差不多,方便描述,比如:
(三)引入了一個(gè)新的模塊dataclasses,該模塊主要提供了一種數(shù)據(jù)類的實(shí)現(xiàn)方式。
優(yōu)點(diǎn)是:
1. 無需定義__init__,然后將值賦給self,dataclass負(fù)責(zé)處理它
2. 我們以更加易讀的方式預(yù)先定義了成員屬性,以及類型提示。我們現(xiàn)在立即能知道number是int類型。這無疑比一般定義類成員的方式更具可讀性。
比如:
在數(shù)據(jù)類被定義后,會根據(jù)給出的類型注解生成一個(gè)如下的初始函數(shù):
是不是很方便,節(jié)約了大量時(shí)間了
(四)生成器引發(fā)StopIteration異常后,StopIteration異常轉(zhuǎn)換RuntimeError異常,它不會影響應(yīng)用程序的堆棧框架。
(五)Python解釋器命令行添加了開發(fā)者模式,參數(shù)是-X,他激活的內(nèi)容有asyncio的調(diào)試模式。為異步操作提供更詳細(xì)的日志記錄和異常處理。以及面向內(nèi)存分配器的調(diào)試hook。這對于編寫CPython擴(kuò)展件的那些人很有用。它能夠?qū)崿F(xiàn)更明確的運(yùn)行時(shí)檢查,了解CPython如何在內(nèi)部分配內(nèi)存和釋放內(nèi)存。啟用faulthandler模塊,那樣發(fā)生崩潰后,traceback始終轉(zhuǎn)儲出去。
(六)新的時(shí)間函數(shù)使用后綴_ns。比如,time.process_time()的納秒版本是time.process_time_ns()
(七)其他
字典現(xiàn)在保持插入順序。這在 3.6 中是非正式的,但現(xiàn)在成為了官方語言規(guī)范。在大多數(shù)情況下,普通的dict能夠替換collections.OrderedDict。
.pyc文件具有確定性,支持可重復(fù)構(gòu)建 —— 也就是說,總是為相同的輸入文件生成相同的 byte-for-byte 輸出。
新增contextvars模塊,針對異步任務(wù)提供上下文變量。
__main__中的代碼會顯示棄用警告(DeprecationWarning)。
新增UTF-8模式。在Linux/Unix系統(tǒng),將忽略系統(tǒng)的locale,使用UTF-8作為默認(rèn)編碼。在非Linux/Unix系統(tǒng),需要使用-X utf8選項(xiàng)啟用UTF-8模式。
允許模塊定義__getattr__、__dir__函數(shù),為棄用警告、延遲import子模塊等提供便利。
新的線程本地存儲C語言API。
更新Unicode數(shù)據(jù)到11.0。
Python3.8
1、海象賦值表達(dá)式
2、僅限位置形參
3、f格式化字符串支持=
4、 typing模塊的改進(jìn)
5、多進(jìn)程共享內(nèi)存
6、 新版本的pickle協(xié)議
7、 性能改進(jìn)
(一)新的語法:= (有點(diǎn)碰瓷go語言,哈哈,不過用法不太一樣)他會先進(jìn)行賦值,然后再進(jìn)行比較,這樣比較方便,避免了兩次循環(huán)了,比如:
(二)新增一個(gè)函數(shù)形參語法/用來指明某些函數(shù)形參必須使用僅限位置而非關(guān)鍵字參數(shù)的形式,比如:
(三)f的格式化字符串可以使用等號=,比如:
(四)Python 3.8給typing添加了一些新元素,因此它能夠支持更健壯的檢查:
1、final修飾器和Final類型標(biāo)注表明,被修飾或被標(biāo)注的對象在任何時(shí)候都不應(yīng)該被重寫、繼承,也不能被重新賦值。
2、Literal類型將表達(dá)式限定為特定的值或值的列表。
3、TypedDict可以用來創(chuàng)建字典,其特定鍵的值被限制在一個(gè)或多個(gè)類型上。注意這些限制僅用于編譯時(shí)確定值的合法性,而不能在運(yùn)行時(shí)進(jìn)行限制。
(五)multiprocessing模塊新增SharedMemory類,可以在不同的Python進(jìn)城之間創(chuàng)建共享的內(nèi)存區(qū)域。
1、在舊版本的Python中,進(jìn)程間共享數(shù)據(jù)只能通過寫入文件、通過網(wǎng)絡(luò)套接字發(fā)送,或采用Python的pickle模塊進(jìn)行序列化等方式。共享內(nèi)存提供了進(jìn)程間傳遞數(shù)據(jù)的更快的方式,從而使得Python的多處理器和多內(nèi)核編程更有效率。
2、共享內(nèi)存片段可以作為單純的字節(jié)區(qū)域來分配,也可以作為不可修改的類似于列表的對象來分配,其中能保存數(shù)字類型、字符串、字節(jié)對象、None對象等一小部分Python對象。
(六)Python的pickle模塊提供了一種序列化和反序列化Python數(shù)據(jù)結(jié)構(gòu)或?qū)嵗姆椒ǎ梢詫⒆值湓瓨颖4嫦聛砉┮院笞x取。不同版本的Python支持的pickle協(xié)議不同,而3.8版本的支持范圍更廣、更強(qiáng)大、更有效的序列化。Python 3.8引入的第5版pickle協(xié)議可以用一種新方法pickle對象,它能支持Python的緩沖區(qū)協(xié)議,如bytes、memoryviews或Numpy array等。新的pickle避免了許多在pickle這些對象時(shí)的內(nèi)存復(fù)制操作。NumPy、Apache Arrow等外部庫在各自的Python綁定中支持新的pickle協(xié)議。新的pickle也可以作為Python 3.6和3.7的插件使用,可以從PyPI上安裝。
(七)許多內(nèi)置方法和函數(shù)的速度都提高了20%~50%,因?yàn)橹霸S多函數(shù)都需要進(jìn)行不必要的參數(shù)轉(zhuǎn)換。
1、一個(gè)新的opcode緩存可以提高解釋器中特定指令的速度。但是,目前實(shí)現(xiàn)了速度改進(jìn)的只有LOAD_GLOBAL opcode,其速度提高了40%。以后的版本中也會進(jìn)行類似的優(yōu)化。
2、文件復(fù)制操作如shutil.copyfile()和shutil.copytree()現(xiàn)在使用平臺特定的調(diào)用和其他優(yōu)化措施,來提高操作速度。
3、新創(chuàng)建的列表現(xiàn)在平均比以前小了12%,這要?dú)w功于列表構(gòu)造函數(shù)如果能提前知道列表長度的情況下,可以進(jìn)行優(yōu)化。
4、Python 3.8中向新型類(如class A(object))的類變量中的寫入操作變得更快。operator.itemgetter()和collections.namedtuple()也得到了速度優(yōu)化。
Python3.9
1、字典并集和可迭代更新
2、字符串方法
3、類型提示
4、新的數(shù)學(xué)函數(shù)
5、新的解析器
6、IPv6范圍內(nèi)的地址
7、新模塊:區(qū)域信息
8、其他語言更改
(一)加入了合并運(yùn)算符|(也就是管道符的那個(gè)鍵),可以使用這些運(yùn)算符進(jìn)行合并和更新,比如:
(二)removeprefix()和removesuffix()
str.removeprefix(substring:string)字符串方法:如果str以它開頭的話,將會返回一個(gè)修改過前綴的新字符串,否則它將返回原始字符串。
str.removesuffix(substring:string)字符串方法:如果str以其結(jié)尾,則返回帶有修改過后綴的新字符串,否則它將返回原始字符串。
(三)無需從typing.List來調(diào)用List,內(nèi)置集合類型(List和Dict)用作泛型類型,比如:
->為函數(shù)添加元數(shù)據(jù),描述函數(shù)的返回類型,從而方便開發(fā)人員使用,這里表示函數(shù)無返回值
(四)math模塊中第一個(gè)新添加的是math.lcm函數(shù):
math.lcm(4, 8, 5)
math.lcm計(jì)算其參數(shù)的最小公倍數(shù)。與GCD一樣,它允許可變數(shù)量的參數(shù)。
(五)Python 3.9使用了一個(gè)新的基于PEG的解析器(在使用pyinstaller靜態(tài)編譯的時(shí)候本機(jī)可用,但是經(jīng)常在低版本系統(tǒng):win7等會提示缺少動態(tài)庫的問題,丟失dll文件)
(六)可以指定IPv6地址的范圍,比如:
(七)zoneinfo模塊將IANA時(shí)區(qū)數(shù)據(jù)庫的支持引入標(biāo)準(zhǔn)庫。它添加了zoneinfo.ZoneInfo,這是一個(gè)由系統(tǒng)時(shí)區(qū)數(shù)據(jù)支持的具體的datetime.tzinfo實(shí)現(xiàn)。
(八)引入了幾個(gè)新的內(nèi)置函數(shù),包括range、tuple、set、frozenset、list、dict ——使用vectorcall可以加快執(zhí)行速度。__import __()現(xiàn)在增加了ImportError以替代ValueError,通常在相對導(dǎo)入超出其頂級包時(shí)發(fā)生。“”.replace(“”,s,n)現(xiàn)在對于所有非零n返回s而不是空字符串。現(xiàn)在它與““ .replace(”“,s)相一致。
Python3.10
1、類型檢查改進(jìn)
2、類型別名更改
3、二進(jìn)制表示中的頻率為1的數(shù)量統(tǒng)計(jì)
4、準(zhǔn)備棄用Distutils內(nèi)置庫
5、字典增加mapping屬性
6、函數(shù)zip()增加strict參數(shù)
7、模板匹配
8、支持 switch語法
(一)Python3.10版本中,聯(lián)合運(yùn)算符使用"|"線來代替了舊版本中的Union[]方法,使得程序更加簡潔,不僅如此, Python3.10在一些內(nèi)置函數(shù)中,同樣可以利用"|"線的聯(lián)合運(yùn)算符來提升程序的性能
(二)Python3.10版本中,則通過 TypeAlias 來規(guī)定了類型名字的替換。這樣操作的優(yōu)勢在于能夠讓程序開發(fā)人員和Python編輯器更加清楚的知道newname是一個(gè)變量名還是一個(gè)類型的別名,提升程序開發(fā)的可靠性。
(三)在Python3.10版本中,可以通過調(diào)用bit_count函數(shù)來統(tǒng)計(jì)二進(jìn)制中數(shù)字“1"的個(gè)數(shù),當(dāng)然,在舊版本中,也可以通過很簡單的代碼實(shí)現(xiàn)這個(gè)功能。
(四)由于Distutils庫的功能已經(jīng)被此setuptools和package庫取代了,所以本著簡潔性的原則,Distutils在不久的將來將會被完全的刪除掉。
(五)在Python3.10中,針對于字典的三個(gè)方法,items, keys和values都增加了一個(gè)新的"mapping"屬性,通過下述的程序可以發(fā)現(xiàn),對三個(gè)方法調(diào)用mapping屬性后都會返回原字曲數(shù)據(jù)。
(六)Python3.10中對于zip函數(shù)添加了strict參數(shù), 顧名思義,strict參數(shù)就是要嚴(yán)格的遵守參數(shù)長度的匹配原則,下述程序中,keys和values列表的長度并不一致。舊版本的zip函數(shù)會根據(jù)長度最短的參數(shù)來創(chuàng)建字典。新版本的zip函數(shù)中, 當(dāng)設(shè)定strict參數(shù)設(shè)置為True時(shí), 則要求zip的輸入?yún)?shù)必須要長度一致,否則就合報(bào)錯(cuò)。
(七)Python 3.10引入了結(jié)構(gòu)化的模式匹配,通過match...case關(guān)鍵詞來完成,可以匹配字典,類以及其他更復(fù)雜的結(jié)構(gòu)。match...case的模式匹配,在使用的方式上與C++中的switch有很多的相似之處。
(八)switch語句
由 match 關(guān)鍵詞和 case 語句組成。通用語法如下:
match subject:
case
case
case _:
(九)優(yōu)化了報(bào)錯(cuò)模式,對排查錯(cuò)誤的時(shí)候更加準(zhǔn)確定位
審核編輯:劉清
-
字符串
+關(guān)注
關(guān)注
1文章
585瀏覽量
20619 -
生成器
+關(guān)注
關(guān)注
7文章
320瀏覽量
21176 -
C++語言
+關(guān)注
關(guān)注
0文章
147瀏覽量
7044 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85098
原文標(biāo)題:python3.6-3.10新特性一覽
文章出處:【微信號:ExASIC,微信公眾號:ExASIC】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
IPython的特性介紹及使用技巧
![IPython的<b class='flag-5'>特性</b><b class='flag-5'>介紹</b>及使用技巧](https://file.elecfans.com/web2/M00/70/8A/pYYBAGNI3yiAJ_KBAAC8xjZZtkg388.png)
魯班貓0 安裝python-pip
【芒果派MangoPi MQ Pro】+ 失敗的Python 3嘗試
使用Python3.10安裝Openvino-Dev Pip包失敗了是為什么?
Python3.6零基礎(chǔ)入門與實(shí)戰(zhàn)PDF電子書免費(fèi)下載
介紹python列表的邊界和嵌套
介紹Python中文件創(chuàng)建與寫入的基本方法
Python常用的幾個(gè)命令介紹
zip():Python 中最好用的內(nèi)置類型之一
![zip():<b class='flag-5'>Python</b> 中最好用的內(nèi)置類型之一](https://file1.elecfans.com/web2/M00/AB/4B/wKgaomU_SxiAWfKQAAD1RUKGHbE796.jpg)
Python3.10.0的特性介紹
![<b class='flag-5'>Python</b>3.10.0的<b class='flag-5'>特性</b><b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/AD/36/wKgZomVAaZaAX8BVAAAFwopovXo728.jpg)
微軟:VSCode決定放棄Python 3.7
![微軟:VSCode決定放棄<b class='flag-5'>Python</b> 3.7](https://file1.elecfans.com/web2/M00/AB/9A/wKgaomVAvnKASV8rAAAWlDkpKSY844.png)
評論