python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里
Python3.8正式發(fā)布!新特性解析在這里
詩書塞外 Python程序員
10月14日,Python 3.8 正式版發(fā)布。這也意味著一個Python開發(fā)周期的結(jié)束,和另一個開發(fā)周期的開始。Python 3.9 預(yù)計在2020年10月份發(fā)布。
那么Python 3.8都帶來了什么新特性和什么新改動呢?讓我們來盤點一下。
新特性
1、賦值表達式
顧名思義,就是在表達式中進行賦值。這個特性總體來說是一個語法糖,讓代碼看起來更簡潔了一點點。比如,下面這段代碼:
n = len(a)
if (n) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
在Python 3.8中可以寫為:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
如果n這個變量只有在if語句及子句中使用,那么明顯Python 3.8的寫法更為簡潔。其中Python 3.8中用到的操作符:=被稱為海象操作符(因為這個操作符看起來像海象的眼睛和一對兒長牙)。
嗯,你看,像不像?
這個特性的另外兩個典型例子是在while語句,以及列表推導(dǎo)中,像這樣:
# Loop over fixed length blocks
while (block := f.read(256)) != '':
process(block)
[clean_name.title() for name in names
if (clean_name := normalize('NFC', name)) in allowed_names]
2、限定位置參數(shù)
這個特性允許你通過在函數(shù)參數(shù)列表中加一個"/",來表示"/"之前的參數(shù)只能夠當作位置參數(shù)使用。下面我們看一個例子:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
這個例子中,a、b只能當作位置參數(shù)使用,e、f只能當作關(guān)鍵字參數(shù)使用(如果你不知道為什么,請復(fù)習*和**的用法),而c、d即可以用作位置參數(shù),也可以用作關(guān)鍵字參數(shù)。
這個特性主要是庫或者基礎(chǔ)代碼的作者使用,它讓基礎(chǔ)代碼的作者不必為參數(shù)起一個固定的名字,參數(shù)名字調(diào)整也不會破壞調(diào)用者的代碼。沒有這個特性之前,有的調(diào)用者會對每個參數(shù)都以關(guān)鍵字參數(shù)的形式調(diào)用,這就導(dǎo)致了庫作者一改參數(shù)名,調(diào)用代碼就崩潰。
另外,還有的庫函數(shù)根本不適合用名字傳參,比如我們常見的add函數(shù),add(1, 2)明顯表意性要好于add(a=1, b=2),add的參數(shù)無論起什么名字,都感覺是多余的。
3、支持將編譯字節(jié)碼文件輸出到其他位置
Python項目中一個常見的麻煩就是清理git代碼庫中的pycache文件,這些文件往往是你一不小心就添加進去了,清理起來卻頗為麻煩。Python 3.8支持通過設(shè)置環(huán)境變量 PYTHONPYCACHEPREFIX ,讓pycache生成到其他位置,而不跟.py文件混在一起。你在代碼中可以通過 sys.pycache_prefix 查看生成的位置。
4、F字符串內(nèi)的'='表達式
在調(diào)試的時候,你是否經(jīng)常會寫這樣的代碼?
>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'user={user} member_since={member_since}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
其中user={user},member_since={member_since}就是典型的樣板代碼。在Python 3.8中,你可以簡寫為:
>>> 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ù)把等號前面變量的值顯示出來。對于調(diào)試來說,這確實更加簡潔了。
5、pickle協(xié)議5,獨立處理內(nèi)存中的數(shù)據(jù)緩存。
Python進程之間傳輸數(shù)據(jù)時,pickle是經(jīng)常用到的。對于數(shù)據(jù)量大的情況,妥善管理并優(yōu)化內(nèi)存使用是非常重要的。Python3.8 中對pickle的數(shù)據(jù)傳輸做了優(yōu)化,提高了性能和效率。
其他改動
1、finally語句中可以有continue子句了,以前是不行的。
2、函數(shù)調(diào)用時,f((keyword)=arg) 這種寫法不再允許了。
3、新增模塊importlib.metadata,用以讀取第三方包的信息。
◆ ◆ ◆ ◆ ◆
今日簽到口令:pf2x
以上就是小編總結(jié)的大家應(yīng)該會比較感興趣的特性和改動了,如果您想查看完整的changelog,請訪問這個地址(點擊閱讀原文也可以):
https://docs.python.org/3.9/whatsnew/3.8.html
總結(jié)
以上是生活随笔為你收集整理的python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主主复制某张表_MySQL主主
- 下一篇: websocket python爬虫_p