Python3.6正式版要來了,你期待哪些新特性?

按照Python官網上的計劃,Python3.6正式版期望在2016-12-16號發布,也就是這周五。從去年的5月份開始,Python3.6版本就已經動手開發了,期間也斷斷續續的發布了4個Alpha版,4個Beta版,以及一個Candidate版本。

作為一個Python愛好者,很期待新版本的發布,也希望能第一時間嘗試一下新特性。本文就根據Python官網文章What』s New In Python 3.6,簡單介紹下Python3.6中的一些新特性。

如果你想嘗試Python3.6,又不想破壞本機的Python環境,建議使用Docker。如果不會使用Docker,建議閱讀下專欄中文章:只要一小時,零基礎入門Docker

還是來規矩,所有代碼上傳至Github:xianhu/LearnPython

新的語法特性

1、格式化字元串(Formatted string literals)

即在普通字元串前添加 f 或 F 前綴,其效果類似於str.format()。比如

name = "Fred"print(f"He said his name is {name}.") # "He said his name is Fred."

其效果相當於:

print("He said his name is {name}.".format(**locals()))

此外,此特性還支持嵌套欄位,比如:

width = 10precision = 4value = decimal.Decimal("12.34567")print(f"result: {value:{width}.{precision}}") #"result: 12.35"

2、變數聲明語法(variable annotations)

即從Python3.5開始就有的Typehints。在Python3.5中,是這麼使用的:

from typing import Listdef test(a: List[int], b: int) -> int: return a[0] + bprint(test([3, 1], 2))

這裡的語法檢查只在編輯器(比如Pycharm)中產生,在實際的使用中,並不進行嚴格檢查。

在Python3.6中,引入了新的語法:

from typing import List, Dictprimes: List[int] = []captain: str # 此時沒有初始值class Starship: stats: Dict[str, int] = {}

3、數字的下劃線寫法(Underscores in Numeric Literals)

即允許在數字中使用下劃線,以提高多位數字的可讀性。

a = 1_000_000_000_000_000 # 1000000000000000b = 0x_FF_FF_FF_FF # 4294967295

除此之外,「字元串格式化」也支持「_」選項,以列印出更易讀的數字字元串:

"{:_}".format(1000000) # "1_000_000""{:_x}".format(0xFFFFFFFF) # "ffff_ffff"

4、非同步生成器(Asynchronous Generators)

在Python3.5中,引入了新的語法 async 和 await 來實現協同程序。但是有個限制,不能在同一個函數體內同時使用 yield 和 await,在Python3.6中,這個限制被放開了,Python3.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、非同步解析器(Asynchronous Comprehensions)

即允許在列表list、集合set 和字典dict 解析器中使用 async for 或 await 語法。

result = [i async for i in aiter() if i % 2]result = [await fun() for fun in funcs if await condition()]

新增加模塊

Python標準庫(The Standard Library)中增加了一個新的模塊:secrets。該模塊用來生成一些安全性更高的隨機數,以用來管理數據,比如passwords, account authentication, security tokens, 以及related secrets等。具體用法可參考官方文檔:secrets

其他新特性

1、新的 PYTHONMALLOC 環境變數允許開發者設置內存分配器,以及註冊debug鉤子等。

2、asyncio模塊更加穩定、高效,並且不再是臨時模塊,其中的API也都是穩定版的了。

3、typing模塊也有了一定改進,並且不再是臨時模塊。

4、datetime.strftime 和 date.strftime 開始支持ISO 8601的時間標識符%G, %u, %V。

5、hashlib 和 ssl 模塊開始支持OpenSSL1.1.0。

6、hashlib模塊開始支持新的hash演算法,比如BLAKE2, SHA-3 和 SHAKE。

7、Windows上的 filesystem 和 console 默認編碼改為UTF-8。

8、json模塊中的 json.load() 和 json.loads() 函數開始支持 binary 類型輸入。

9、.......

還有很多其他特性,但在平時工作中能用到的大概就這麼多了。有興趣的讀者可以直接參考官方文檔:What』s New In Python 3.6

=============================================================

作者主頁:笑虎(Python愛好者,關注爬蟲、數據分析、數據挖掘、數據可視化等)

作者專欄主頁:擼代碼,學知識 - 知乎專欄

作者GitHub主頁:擼代碼,學知識 - GitHub

歡迎大家拍磚、提意見。相互交流,共同進步!

==============================================================

推薦閱讀:

Python中那些神一樣的代碼
神奇的yield
Python · 進度條
Spark SQL你不得不知道的那些事兒
Python實現Zip文件的暴力破解

TAG:Python | 数据分析 | 产品经理 |