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

魯班貓0 安裝python-pip
【芒果派MangoPi MQ Pro】+ 失敗的Python 3嘗試
使用Python3.10安裝Openvino-Dev Pip包失敗了是為什么?
Python3.6零基礎入門與實戰PDF電子書免費下載
介紹python列表的邊界和嵌套
介紹Python中文件創建與寫入的基本方法
Python常用的幾個命令介紹
zip():Python 中最好用的內置類型之一

Python3.10.0的特性介紹

微軟:VSCode決定放棄Python 3.7

評論