Python漲知識——__future__是什麼?

Python漲知識——__future__是什麼?

問題描述

大家都知道Python的每個新版本都會增加一些新的功能,或者對原來的功能作一些改動。有些改動是不相容舊版本的。那麼這和“__future__”有什麼關係呢?

Python漲知識——__future__是什麼?

首先我們要知道“__future__”是一個模組而非單獨的函式, 接著我們談使用“__future__”模組的目的和作用。

Python漲知識——__future__是什麼?

“__future__”模組的目的

關於版本的問題,“__future__”目的是把下一個版本的特性匯入到當前版本,這樣我們就可以在當前版本中測試一些新版本的特性,從而使得python未來版本的遷移更加容易。

“__future__”模組的作用

future 語句是一種針對編輯器的指令,指明某個特定模組應當使用在某個python發行版中成為標準特性的語法或語義。

future語句注意事項

future 語句必須在靠近模組開頭的位置出現。只有以下內容可以放在future語句之前。

1 、模組的文件字串

2 、註釋

3 、空行

4 、其他future語句

關於“__future__”模組

future 語句啟用的所有歷史特性仍然為python3認可,其中包括absolute_import,division,generators,generator_stop,unicode_literals,print_function,nested_scopes和with_statement。它們都已成為冗餘項,因為他們總是為已啟用狀態,保留他們只是為了向後相容。

future 語句在編譯時會被識別並作特使對待:對核心構造語義的改變常常是透過生成不同的程式碼來實現。新的特性甚至肯能會引入新的不相容語法,在這種情況下編譯器可能需要以不同的方式來解析模組,這樣的決定不能推遲到執行才做出。

Python漲知識——__future__是什麼?

對於任何給定的釋出版本,編譯器要知道哪些特性名稱已被定義,如果某個future語句包含未知的特性則會引發編譯錯誤

“__future__。py”中每一條語句的格式如下:

FeatureName=_Feture(OptionalRelease,MandatoryRelease,CompilerFlag) OptionalRelease 記錄了一個特性首次釋出時的python版本。

MandatoryRelease 表示該特性會變成語言的一部分的預測時間,其他情況MandatoryRelease用來記錄這個特性是何時成為語言的一部分的,從該版本往後,使用該特性將不需要future語句,不過大多數人還是會加上對應的import。MandatoryRelease也可能是None,表示這個特性已經被撤銷。

CompilerFlag 是一個(位)標記,對於動態編譯的程式碼,需要將這個標記作為第四個引數傳入內建函式compile()中已開啟對應的特性。

“我自己是一名從事了多年開發的Python老程式設計師,辭職目前在做自己的Python私人定製課程,今年年初我花了一個月整理了一份最適合2019年學習的Python學習乾貨,從最基礎的到各種框架都有整理,送給每一位喜歡Python小夥伴,想要獲取的可以轉發文章並關注我的頭條。在後臺私信我:01,即可免費獲取。“

Python漲知識——__future__是什麼?