顛覆你認知的Python3.9
我通讀了python 3.9發行說明和相關的討論。根據這些資訊,我想寫一個全面的指南,以便每個人都能一眼了解這些功能及其詳細的工作原理
簡而言之
從字典更新/合併到添加新的字元串方法,再到引入zoneinfo
庫,都添加了許多新功能。
此外,已經引入了新的穩定且高性能的解析器。
標準庫已更新為具有許多新功能,並增加了新的模組zoneinfo
和graphlib
。多個模組已經過改進,如ast,asyncio,concurrent.futures,multiprocessing,xml
等.
這個版本進一步穩定了Python標準庫
字典更新和合併運算符
兩個新的運算符,|
並且|=
已添加到內置dict
類中。
該|運算符用於合併的字典,而|=運營商可用於更新詞典。
程式碼對於合併:|
>>> a = {'farhad':1, 'blog':2, 'python':3}
>>> b = {'farhad':'malik', 'topic':'python3.9'}
>>> a | b
{''blog':2,'python':3 ,'farhad':'malik', 'topic':'python3.9'}>>> b | a
{'farhad':1, 'blog':2,'python':3,'topic':'python3.9'}
更新: =|
>>> a | = b
>>> a
{'blog':2, 'python':3, 'farhad':'malik'}
正如我們在上面看到的,兩個新的運算符|
和|=
已被添加到內置dict
類中
刪除前後綴新字元串
str對象中已添加了兩個新功能。
-
第一個函數刪除前綴。是的
str.removeprefix(prefix)
-
第二個功能刪除後綴。是的
str.removesuffix(suffix)
'coxie_python'.removeprefix('coxie_')
# 返回python
'coxie_python'.removesuffix('_python')
# 返回coxie
- 第一個函數刪除前綴。這是str.removeprefix(prefix).
- 第二個功能刪除後綴。它是str.removesuffix(suffix).
內置通用類型的類型提示
此版本已啟用了鍵入模組中當前可用的所有標準集合中對泛型語法的支援。
泛型類型通常是一個容器,例如列表。這是可以參數化的類型。參數化的泛型是泛型的實例,具有容器元素的預期類型,例如list [str]
我們可以將list
或dict
內置集合類型用作通用類型,而不是使用typing.List or typing.Dict.
例如,我們可以通過注釋程式碼來指導Python運行時類型檢查:
def print_value(input:str):
print(input)
#如果輸入不是字元串,我們將得到通知
舉例來說,我們會看到typing.List,typing.Dictionary
帶有內置一起list,dictionary
等。這使我們能夠編寫程式碼:
def read_blog_tags(tags:list[str[) -> None
for dtag in tags:
print("Tag Name",tag)
隨機位元組生成
在3.9版本中添加的另一個功能是function random.Random.randbytes()
。該函數可用於生成隨機位元組。
我們可以生成隨機數,但是如果我們需要生成隨機位元組怎麼辦?在3.9版之前,開發人員必須具有創造力才能生成隨機位元組。儘管我們可以使用,os.getrandom(), os.urandom() or secrets.token_bytes()
但是我們不能生成偽隨機模式。
例如,為確保隨機數以預期的方式生成且過程可重現,我們通常將種子與random.Random
模組一起使用。
結果,random.Random.randbytes()
已經引入了方法。它也可以以受控方式生成隨機位元組。
字元串替換功能修復
在Python 3.9之前的版本中,「」.replace(「」,s,n)
對於所有非零n ,返回的空字元串而不是s。
此錯誤使用戶感到困惑,並導致應用程式中行為不一致。
3.9版本已解決此問題,現在與保持一致"".replace("", s)
。
replace
函數的工作方式是,對於給定的最大替換髮生參數,它將字元串中的一組字元替換為一組新的字元。
srting.replace(s,old,new,[,maxreplace])
# 返回字元串 s的副本,其中所有出現的子字元串old都被new替換