python 3.9特性,开发者应该知道的Python 3.9新特性
導讀:Python 3.9來了,有哪些新特性值得學,值得用?
Python 2.9(5.10.2020)已經發布了一段時間,最后一個Alpha版(3.9.0a5)近期發布了測試版。開發者應該看新版有哪些新功能,改進和修復。
安裝測試版
本節嘗鮮安裝Python 3.9,但不要破壞穩定版本的Python解釋。命令如下:
wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0a5.tgztar xzvf Python-3.9.0a5.tgzcd Python-3.9.0a5./configure --prefix=$HOME/python-3.9.0a5makemake install$HOME/python-3.9.0a5/bin/python3.9
運行以上指令后,我們會收到IDLE和歡迎消息。類似于如下:
Python 3.9.0a5 (default, Apr 16 2020, 18:57:58)[GCC 9.2.1 20191008] on linuxType "help", "copyright", "credits" or "license" for more information.
新的字典運算符
最明顯的新特性大概是新的字典合并運算符 _ 或 .
從現在開始,你有3個選項來合并字典:| |=
來看如下代碼:
# Dictionaries to be merged:d1 = {"x": 1, "y": 4, "z": 10}d2 = {"a": 7, "b": 9, "x": 5}# Expected output after merging{'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}# ^^^^^ Notice that "x" got overridden by value from second dictionary# 1. Optiond = dict(d1, **d2)# 2. Optiond = d1.copy() ?# Copy the first dictionaryd.update(d2) ? # Update it "in-place" with second one# 3. Optiond = {**d1, **d2}
上面第一個選項函數使用初始化字典,第一個參數是普通字典,第二個是Key/Value對的列表。在此種情況下,只是使用運算符解壓縮到另一個字典。
dict(iterable, **kwargs)**
第二種方法是使用第二個字典來更新第一個字典。因為此字典在原位上修改,我們需要將第一個副本復制到變量中,以避免修改原始變量。
第三種方法也是最后一個。在我看來,最干凈的解決方案就是使用字典解包和解壓縮兩個變量到一個結果。
d1 d2 d
是的,即便以上選項是完全等價的,我們現在使用新的運算符提供新的解決方案。
|
# Normal mergingd = d1 | d2# d = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}# In-place mergingd1 |= d2# d1 = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}
可以看到,此段代碼的第一個示例與前面的運算符解包(d = {**d1, **d2})很相似。第二個示例可用于立即合并,其中原始變量d1被第二個操作數d2的值立即更新。
IPv6范圍地址
Python 3.9中引入的另一個更改是可以指定IPv6地址的范圍。如果您不熟悉IPv6范圍,它們將用于指定相應IP地址在Internet的哪個部分有效。范圍可以在IP地址的末尾使用%符號指定-例如:3FFE:0:0:1:200:F8FF:FE75:50DF%2-因此此IP地址在范圍內2,即鏈接本地地址。
因此,如果您需要在Python中處理IPv6地址,現在可以這樣處理:
from ipaddress import IPv6Addressaddr = IPv6Address('ff02::fa51%1')print(addr.scope_id)# "1" - interface-local IP address
但是,使用IPv6范圍時應注意一件事。使用基本的Python運算符進行比較時,范圍不同的兩個地址不是相等的。
新的math模塊
同時,在math模塊中,添加或改進了許多其他功能。從對一個現有功能的改進開始:
import math# Greatest common divisormath.gcd(80, 64, 152)# 8
以前gcd計算最大公約數的函數只能應用于2個數字,程序員在處理更多數字時必須執行類似的操作,如math.gcd(80, math.gcd(64, 152))。從Python 3.9開始,可以將其應用于任意數量的值。
math模塊的 第一個新增加的math.lcm功能,如下代碼:
# Least common multiplemath.lcm(4, 8, 5)# 40余下的2個新函數緊密相關,那就是math.nextafter和math.ulp:# Next float after 4 going towards 5math.nextafter(4, 5)4.000000000000001# Next float after 9 going towards 0math.nextafter(9, 0)8.999999999999998# Unit in the Last Placemath.ulp(1000000000000000)0.125math.ulp(3.14159265)4.440892098500626e-16
math.nextafter(x, y)功能是非常簡單-如果x是浮點數,則y也會同時考慮到浮點數精度。
新的字符串函數
字符串添加了兩個新的便捷功能:
# Remove prefix"someText".removeprefix("some")# "Text"# Remove suffix"someText".removesuffix("Text")# "some"
當然你仍然可以使用string[len(prefix):]前綴和string[:-len(suffix)]后綴來實現該功能。但如果經常執行該操作,新的函數就該派上用場了。
小獎勵
最后送大家一個Python 3.9甜點。實際上,它已經將HTTP狀態碼添加到了http.HTTPStatus上了。如下代碼:
import httphttp.HTTPStatus.EARLY_HINTS# http.HTTPStatus.TOO_EARLY# http.HTTPStatus.IM_A_TEAPOT#
沒事的時候可以來看看這些狀態碼,我覺得可能你也不知道啥時候能用上它們。也許在生產服務器返回像 http.HTTPStatus.IM_A_TEAPOT 的狀態時,可能會提高程序員的生活質量。
小結
這里只是一部分Python 3.9的更新內容,也并非所有更新與你的日常編程有關,但一部分相信會幫助你提高效率。
Python 3.9目前還處于Alpha階段,穩定版本大概在10月份正式推出,這段時間還會有一些更改。
總結
以上是生活随笔為你收集整理的python 3.9特性,开发者应该知道的Python 3.9新特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php事务 面向对象,关于PHP面向对象
- 下一篇: 实例35:python