Python 3.6
PEP 498: Formatted string literals
f-strings
這個新 feature 的加入是因為先前有太多狀況是在寫冗餘的 format,
所以特別加入這個 feature 來讓使用變簡單。
原本:
(a, b, c) = (1, 2, 3)
s = "{c} | {b} | {a}".format(a=a, b=b, c=c)
現在可以:
(a, b, c) = (1, 2, 3)
s = f"{c} | {b} | {a}"
PEP 526: Syntax for variable annotations
把原本在 PEP 484 加入的函式 Type Hinting 擴增到變數的使用上。
primes: List[int] = []
captain: str # Note: no initial value!
class Starship:
stats: Dict[str, int] = {}
PEP 515: Underscores in Numeric Literals
在撰寫數字較長的數值時,
會因為長度的關係而不好閱讀及判斷,
因此有些程式語言可以在數值中任意加入分隔符號來做斷點,
而在 PEP 515 中,
Python 也加入了 _
作為分隔符號。
x = 1_000_000_000_000_000
y = 0x_FF_FF_FF_FF
z = 2_3_4_5
s = '{:_}'.format(1000000) # '1_000_000'
t = '{:_x}'.format(0xFFFFFFFF) # 'ffff_ffff'
相關 Commits:
更多 Asynchronous 的支援
PEP 525: Asynchronous Generators
PEP 530: Asynchronous Comprehensions
新 module — secrets
內含一些函數可以產生亂度較強的 random 數值。
新 dict 實做
相關檔案:
相關 Commits:
DTrace 和 SystemTap 支援
參考
- Python 3.6 & Performance. A Love Story
- perf
在 Linux 下會蒐集一些例如 ASLR 有無開啟、IRQ affinity 等可能影響效率的系統層資訊
CPython 2.7 仍是目前最快的版本,但是效能 CPython 3.6 > CPython 3.5 > CPython 3.4
asyncio.Future 和 asyncio.Task 都用 C 重新實做
string 和 bytes 的處理有顯著提昇
glob 的處理有顯著提昇
dict 的新實做類似 PyPy 內的 dict,記憶體用量較小,且會保有原本的順序
- Tiny Python 3.6 Notebook
列了 Python 3.6 整個語言的特色範例,用於快速複習新的 Python,不適合初學者