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