python3.8版本已經(jīng)更新,數(shù)據(jù)分析師和數(shù)據(jù)開發(fā)者看過來

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

其他新特性

  1. 正則表達(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))
  1. Dict and dictviews are now iterable in reversed insertion order using reversed()

  2. 剩下的特性就比較偏僻了,就不一一介紹了,感興趣的同學(xué)可以直接參考官方文檔,python3.8更新內(nèi)容。

本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺 OpenWrite 發(fā)布

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容