python3.8版本已經(jīng)更新,數(shù)據(jù)分析師和數(shù)據(jù)開發(fā)者看過來
新版本python3.8已經(jīng)發(fā)布
作為一個放棄java轉(zhuǎn)投python很多年的數(shù)據(jù)開發(fā)者,已經(jīng)好久沒有更新python了,也很久沒有關(guān)注python的一些新功能新特性了,去年把自己做的幾個小項(xiàng)目更新到了python3.6,然后就一直沒把精力放到這一塊了。
今天因?yàn)榘惭b一個第三方庫失敗,打算去官網(wǎng)看下python的更新情況,發(fā)現(xiàn)已經(jīng)更新至python3.8.2了,那么就當(dāng)機(jī)立斷下載安裝,順便學(xué)習(xí)一下python3.8的新特性吧。

安裝python3.8.2
- windows下的安裝很簡單,直接下載msi安裝文件雙擊就可以了,然后稍微配置一下環(huán)境變量。
- Linux下稍微復(fù)雜一點(diǎn),主要是因?yàn)闆]有合適的yum安裝包,具體步驟如下:
# 下載源碼
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
# 解壓
tar zxf Python-3.8.2.tgz Python-3.8.2/
# 進(jìn)入文件夾
cd Python-3.8.2/
# 編譯前準(zhǔn)備
yum update -y
yum groupinstall -y 'Development Tools'
yum install -y gcc openssl-devel bzip2-devel libffi-devel
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
# 編譯安裝
./configure prefix=/usr/local/python3.8 --enable-optimizations
make && make install
# 添加環(huán)境變量
export PATH=$PATH:/usr/local/python3.8/bin/
主要的新特性
Assignment expressions 海象運(yùn)算符
Python 3.8.0 有一個新的語法:=,它將值賦給一個更大的表達(dá)式中的變量。它被親切地稱為“海象運(yùn)算符”(walrus operator),因?yàn)樗L得像海象的眼睛和象牙。
之前學(xué)了一直很自GOLANG,感覺python這次在想GOLANG學(xué)習(xí),就像JAVA在學(xué)習(xí)python一樣。

現(xiàn)在讓我們看看下面的代碼段:
a = range(15)
if (len(a)) > 10:
print(f"List is too long ({len(a)} elements, expected <= 10)")
在這個代碼段中,我們將調(diào)用函數(shù) len()兩次。有什么方法可以避免重新調(diào)用以提高可讀性嗎?是的,在改進(jìn)代碼之后,我們得到了以下結(jié)果:
a = range(15)
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
請盡量將海象運(yùn)算符的使用限制在清晰的場合中,以降低復(fù)雜性并提升可讀性。
Positional-only parameters 僅限位置形參
新增了一個函數(shù)形參語法 / 用來指明某些函數(shù)形參必須使用僅限位置而非關(guān)鍵字參數(shù)的形式。 這種標(biāo)記語法與通過 help() 所顯示的使用 Larry Hastings 的 Argument Clinic 工具標(biāo)記的 C 函數(shù)相同。。
# 在下面的例子中,形參 a 和 b 為僅限位置形參,c 或 d 可以是位置形參或關(guān)鍵字形參,而 e 或 f 要求為關(guān)鍵字形參:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
# 合法的
f(10, 20, 30, d=40, e=50, f=60)
# 不合法的
f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
這種標(biāo)記形式的一個用例是它允許純 Python 函數(shù)完整模擬現(xiàn)有的用 C 代碼編寫的函數(shù)的行為。 例如,內(nèi)置的 divmod() 函數(shù)不接受關(guān)鍵字參數(shù):
def divmod(a, b, /):
"Emulate the built in divmod() function"
return (a // b, a % b)
Python 初始化配置(改進(jìn)的嵌入)
新增的 PYTHONPYCACHEPREFIX 設(shè)置 (也可使用 -X pycache_prefix) 可將隱式的字節(jié)碼緩存配置為使用單獨(dú)的并行文件系統(tǒng)樹,而不是默認(rèn)的每個源代碼目錄下的 pycache 子目錄。
緩存的位置會在 sys.pycache_prefix 中報(bào)告 (None 表示默認(rèn)位置即 pycache 子目錄)。
f - 字符串支持 = 用于自動記錄表達(dá)式和調(diào)試文檔
增加 = 說明符用于 f-string。 形式為 f'{expr=}' 的 f - 字符串將擴(kuò)展表示為表達(dá)式文本,加一個等于號,再加表達(dá)式的求值結(jié)果。 例如:
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
通常的 f 字符串格式說明符 允許更細(xì)致地控制所要顯示的表達(dá)式結(jié)果:
>>> delta = date.today() - member_since
>>> f'{user=!s} {delta.days=:,d}'
'user=eric_idle delta.days=16,075'
= 說明符將輸出整個表達(dá)式,以便詳細(xì)演示計(jì)算過程:
>>> print(f'{theta=} {cos(radians(theta))=:.3f}')
theta=30 cos(radians(theta))=0.866
其他新特性
- 正則表達(dá)式添加對 \N{name} 專業(yè)詞匯的支持
>>> notice = 'Copyright ? 2019'
>>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s(\d{4})')
>>> int(copyright_year_pattern.search(notice).group(1))
Dict and dictviews are now iterable in reversed insertion order using
reversed()剩下的特性就比較偏僻了,就不一一介紹了,感興趣的同學(xué)可以直接參考官方文檔,python3.8更新內(nèi)容。
本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺 OpenWrite 發(fā)布