1. 格式化字符串字面量
PEP 498引入了 f-string,壹種新型的字符串字面量。中文翻譯為“格式化字符串字面量”。
這種字符串以 f 為前綴,類似 str.format() 方法所接受的字符串。其中的可替換字段用 {} 包裹起來,在運行時進行求值。
具體代碼示例:
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}" # nested fields
'result: 12.35'
2. 變量註釋語法
此前,Python 已加入了對函數變量類型進行註釋的標準,也就是 type hint。而 Python 3.6 中則根據PEP 526的提議,加入了對更多變量類型註釋的功能,包括類變量和實例變量。
具體代碼示例:
captain: str # 未設置初始值
class Starship:
stats: Didct[str, int] = {}
與靜態語言中的變量聲明不同,Python 中的變量聲明是為了更加方便地位第三方工具和庫提供結構化的類型元數據。會使用到新語法的工具包括:mypy,pytype,PyCharm,等等。
3. 數字字面量使用下劃線
對於較大的數字來說,位數太多可能不好判斷值到底有多大。現在新版本中將允許妳在數字字面量中使用下劃線,提高可讀性。
具體代碼示例:
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295
4. 異步生成器
在上壹個版本中,Python 引入了對原生協程的支持,並可使用 async 或 await 語法,但是有壹個限制是沒辦法在同壹個函數體中使用 await 和 yield 。這個限制在 3.6 版中取消了,因此以後將可以定義異步生成器。
具體代碼示例:
async def ticker(delay, to):
"""Yield numbers from 0 to *to* every *delay* seconds."""
for i in range(to): yield i
await asyncio.sleep(delay)
使用新語法,可以讓妳的代碼更簡潔,運行速度更快。
5. 異步推導
推導(Comprehension)本身就是 Python中壹個很棒的語法糖。在新版本中,它將得到壹次重大升級。PEP 530提出了在列表、元組、字典推導或生成器表達式中使用 async for 語法。
這樣就將原有各種推導式變成了可支持異步。
同時,推導式中還支持使用 await 表達式。
以上就是 3.6 版本中新增的 5 大特性:
格式化字符串字面量
變量註釋語法
數字字面量使用下劃線
異步生成器
異步推導