摘要:模塊的導入一定要放在最上方,也就是在所有其它模塊之前導入。最后一列是每個新特性所對應的及簡單描述。相對導入則可以使用為標記導入相對目錄中的模塊,具體可以參考這篇文章導入模塊的幾種姿勢。
項目地址:https://git.io/pytips
我們經常從一些組織良好的 Python 項目中看到 __future__ 的身影,例如:
from __future__ import absolute_import, division
__future__ 模塊由 PEP 236 提出并加入到 Python 2.1,其存在的主要原因是 Python 的版本升級經常會增加一些新的特性,而 __future__ 模塊將一些新版本中將會增加的新的特性進行聲明,同時使得舊版本可以使用這些新的語法特性。當然,如果你用的是 Python 2.1 以前的版本,是沒辦法使用 __future__ 的。__future__ 模塊的導入一定要放在最上方,也就是在所有其它模塊之前導入。
根據 Python 3.5 中 __future__ 的源文件,一共包括下面幾個新特性:
表中第一列包含了所有可以從 __future__ 中導入的特性,optional in 中的版本號為最低可使用的版本,mandatory in 中的版本號為已經實現,無需從 __future__ 導入 的版本號。最后一列是每個新特性所對應的 PEP 及簡單描述。下面主要看一下幾個 3.0 之后添加的屬性。
division
在 3.0 之前,除號 / 的用法都是整除,例如在 2.7 中,8/7=1,如果需要浮點數相除,需要顯式使用浮點數類型:8./7=1.1428571428571428,如果是使用變量相除,則需要 a*1.0/7。而在 3.0 以后的版本,整除和浮點數相除分別使用 // 和 / 符號:
from __future__ import division print(8//7) print(8/7)
1 1.1428571428571428
absolute_import
PEP 328 主要添加了多行導入和絕對/相對導入的特性,可以使用括號而不是 來進行多行導入。相對導入則可以使用 . 為標記導入相對目錄中的模塊,具體可以參考這篇文章:Python導入模塊的幾種姿勢。
from __future__ import absolute_import from tkinter import (Tk, Frame, Button, Entry, Canvas, Text, LEFT, DISABLED, NORMAL, RIDGE, END)
print_function
我們都知道 3.0 以后 print 變為函數而不再是聲明語句,而是一個內置函數,并且可以接受除打印內容以外的參數:
print(*args, sep=" ", end=" ", 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 每日推送
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45423.html
摘要:項目地址我之前翻譯了協程原理這篇文章之后嘗試用了模式下的協程進行異步開發,確實感受到協程所帶來的好處至少是語法上的。 項目地址:https://git.io/pytips 我之前翻譯了Python 3.5 協程原理這篇文章之后嘗試用了 Tornado + Motor 模式下的協程進行異步開發,確實感受到協程所帶來的好處(至少是語法上的:D)。至于協程的 async/await 語法是如...
摘要:借鑒了中的某些迭代器的構造方法,并在中實現該模塊是通過實現,源代碼。 項目地址:https://git.io/pytips 0x01 介紹了迭代器的概念,即定義了 __iter__() 和 __next__() 方法的對象,或者通過 yield 簡化定義的可迭代對象,而在一些函數式編程語言(見 0x02 Python 中的函數式編程)中,類似的迭代器常被用于產生特定格式的列表(或序列)...
摘要:項目地址時間和日期可能涉及到不同的時區格式,同時又經常需要作為時間戳保存,有時候還需要進行一些加減操作,因此處理起來通常會因為方法太多而無從下手。中與時間和日期相關的標準庫有個和。 項目地址:https://git.io/pytips 時間和日期可能涉及到不同的時區、格式,同時又經常需要作為時間戳保存,有時候還需要進行一些加減操作,因此處理起來通常會因為方法太多而無從下手。Python...
摘要:項目地址閉包在計算機科學中,閉包英語,又稱詞法閉包或函數閉包,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。 項目地址:https://git.io/pytips 閉包(Closure) 在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是...
摘要:項目地址迭代器與生成器迭代器與生成器是中比較常用又很容易混淆的兩個概念,今天就把它們梳理一遍,并舉一些常用的例子。生成器前面說到創建迭代器有種方法,其中第三種就是生成器。 項目地址:https://git.io/pytips 迭代器與生成器 迭代器(iterator)與生成器(generator)是 Python 中比較常用又很容易混淆的兩個概念,今天就把它們梳理一遍,并舉一些常用的例...
閱讀 2706·2021-11-11 16:54
閱讀 2329·2021-10-09 09:44
閱讀 2548·2019-08-30 15:54
閱讀 1936·2019-08-30 11:24
閱讀 1175·2019-08-29 17:03
閱讀 2107·2019-08-29 16:22
閱讀 2086·2019-08-29 13:11
閱讀 1044·2019-08-29 12:14