python3.8版本已經更新,數據分析師和數據開發者看過來

python3.8版本已經更新,數據分析師和數據開發者看過來

新版本python3.8已經發布

作爲一個放棄java轉投python很多年的數據開發者,已經好久沒有更新python了,也很久沒有關注python的一些新功能新特性了,去年把自己做的幾個小項目更新到了python3.6,然後就一直沒把精力放到這一塊了。

今天因爲安裝一個第三方庫失敗,打算去官網看下python的更新情況,發現已經更新至python3.8.2了,那麼就當機立斷下載安裝,順便學習一下python3.8的新特性吧。

安裝python3.8.2

  • windows下的安裝很簡單,直接下載msi安裝文件雙擊就可以了,然後稍微配置一下環境變量。
  • Linux下稍微複雜一點,主要是因爲沒有合適的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/
# 進入文件夾
cd Python-3.8.2/
# 編譯前準備
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
# 添加環境變量
export PATH=$PATH:/usr/local/python3.8/bin/

主要的新特性

Assignment expressions 海象運算符

Python 3.8.0 有一個新的語法:=,它將值賦給一個更大的表達式中的變量。它被親切地稱爲**“海象運算符”(walrus operator)**,因爲它長得像海象的眼睛和象牙。

之前學了一直很自GOLANG,感覺python這次在想GOLANG學習,就像JAVA在學習python一樣。

現在讓我們看看下面的代碼段:

a = range(15)
if (len(a)) > 10:
    print(f"List is too long ({len(a)} elements, expected <= 10)")

在這個代碼段中,我們將調用函數 len()兩次。有什麼方法可以避免重新調用以提高可讀性嗎?是的,在改進代碼之後,我們得到了以下結果:

a = range(15)
if (n := len(a)) > 10:
	print(f"List is too long ({n} elements, expected <= 10)")

請儘量將海象運算符的使用限制在清晰的場合中,以降低複雜性並提升可讀性。

Positional-only parameters 僅限位置形參

新增了一個函數形參語法 / 用來指明某些函數形參必須使用僅限位置而非關鍵字參數的形式。 這種標記語法與通過 help() 所顯示的使用 Larry Hastings 的 Argument Clinic 工具標記的 C 函數相同。。

# 在下面的例子中,形參 a 和 b 爲僅限位置形參,c 或 d 可以是位置形參或關鍵字形參,而 e 或 f 要求爲關鍵字形參:
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

這種標記形式的一個用例是它允許純 Python 函數完整模擬現有的用 C 代碼編寫的函數的行爲。 例如,內置的 divmod() 函數不接受關鍵字參數:

def divmod(a, b, /):
    "Emulate the built in divmod() function"
    return (a // b, a % b)

Python 初始化配置(改進的嵌入)

新增的 PYTHONPYCACHEPREFIX 設置 (也可使用 -X pycache_prefix) 可將隱式的字節碼緩存配置爲使用單獨的並行文件系統樹,而不是默認的每個源代碼目錄下的 pycache 子目錄。

緩存的位置會在 sys.pycache_prefix 中報告 (None 表示默認位置即 pycache 子目錄)。

f - 字符串支持 = 用於自動記錄表達式和調試文檔

增加 = 說明符用於 f-string。 形式爲 f’{expr=}’ 的 f - 字符串將擴展表示爲表達式文本,加一個等於號,再加表達式的求值結果。 例如:

>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

通常的 f 字符串格式說明符 允許更細緻地控制所要顯示的表達式結果:

>>> delta = date.today() - member_since
>>> f'{user=!s}  {delta.days=:,d}'
'user=eric_idle  delta.days=16,075'

= 說明符將輸出整個表達式,以便詳細演示計算過程:

>>> print(f'{theta=}  {cos(radians(theta))=:.3f}')
theta=30  cos(radians(theta))=0.866

其他新特性

  1. 正則表達式添加對 \N{name} 專業詞彙的支持
>>> 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. 剩下的特性就比較偏僻了,就不一一介紹了,感興趣的同學可以直接參考官方文檔,python3.8更新內容

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章