項目地址:https://git.io/pytipspython
咱們常常從一些組織良好的 Python 項目中看到 __future__
的身影,例如:git
from __future__ import absolute_import, division
__future__
模塊由 PEP 236 提出並加入到 Python 2.1,其存在的主要緣由是 Python 的版本升級常常會增長一些新的特性,而 __future__
模塊將一些新版本中將會增長的新的特性進行聲明,同時使得舊版本可使用這些新的語法特性。固然,若是你用的是 Python 2.1 之前的版本,是沒辦法使用 __future__
的。__future__
模塊的導入必定要放在最上方,也就是在全部其它模塊以前導入。segmentfault
根據 Python 3.5 中 __future__
的源文件,一共包括下面幾個新特性:函數
表中第一列包含了全部能夠從 __future__
中導入的特性,optional in
中的版本號爲最低可以使用的版本,mandatory in
中的版本號爲已經實現,無需從 __future__
導入 的版本號。最後一列是每一個新特性所對應的 PEP 及簡單描述。下面主要看一下幾個 3.0 以後添加的屬性。spa
divisioncode
在 3.0 以前,除號 /
的用法都是整除,例如在 2.7 中,8/7=1
,若是須要浮點數相除,須要顯式使用浮點數類型:8./7=1.1428571428571428
,若是是使用變量相除,則須要 a*1.0/7
。而在 3.0 之後的版本,整除和浮點數相除分別使用 //
和 /
符號:cdn
from __future__ import division print(8//7) print(8/7)
1 1.1428571428571428
absolute_importtoken
PEP 328 主要添加了多行導入和絕對/相對導入的特性,可使用括號而不是 \
來進行多行導入。相對導入則可使用 .
爲標記導入相對目錄中的模塊,具體能夠參考這篇文章:Python導入模塊的幾種姿式。ip
from __future__ import absolute_import from tkinter import (Tk, Frame, Button, Entry, Canvas, Text, LEFT, DISABLED, NORMAL, RIDGE, END)
print_functionget
咱們都知道 3.0 之後 print
變爲函數而再也不是聲明語句,而是一個內置函數,而且能夠接受除打印內容之外的參數:
print(*args, sep=' ', end='\n', file=None)
from __future__ import print_function print("Hello", "World", sep=',', end='!')
Hello,World!
generator_stop
在生成器內部使用 raise StopIteration
意味着生成器終止,但這樣寫會形成一些隱藏的 BUG(見 PEP 479),新的特性要求杜絕這一用法並拋出 RuntimeError
,若要終止生成器,請使用 return
。
from __future__ import generator_stop def gen(n): i = 0 while i < n: yield i i += 1 if i % 2 == 0: raise StopIteration # use return g = gen(3) print(next(g)) print(next(g)) try: print(next(g)) except RuntimeError as err: print(err)
0 1 generator raised StopIteration
爲了吸引更多 Java、C 等語言的用戶,使他們更快適應 Python 代碼縮進的語法同時又能兼容他們不可抑制地輸入 {}
的衝動,__future__
還提供了 braces
特性,使花括號能夠被正確解析!
from __future__ import braces
歡迎關注公衆號 PyHub 每日推送