2016-07-31 80 views
3

我看了一下source code for __future__.py,這對我來說沒有意義 - 這個實際上是如何工作的,以改變師的行爲?Python如何處理「from __future__ import division」?

+2

啓用我的猜測會是'compiler_flag'可能會向編譯器發出信號以改變分區 – Natecat

+0

有趣......也許我只是不明白'import'是如何工作的;我認爲它評估了有問題的模塊,然後創建了一個模塊對象,這個模塊對象可以被帶入命名空間範圍的全部或單個屬性('from xyz import abc')。但是看看'__future __。py'好像是如果這個模塊被評估了,那麼所有的功能都應該被啓用。 '__future__ import XYZ'如何在'__future __。py'中挑選對象的創建? –

回答

4

該模塊僅用於記錄/內省目的;其中沒有任何代碼確實是什麼。

相反,當Python是編譯的模塊,它調用的模塊,該模塊檢查from __future__ import報表上PyFuture_FromAST,並假設他們是有效的,一個PyFutureFeatures對象sets the appropriate flags。然後在編譯模塊之前,編譯器會去並且sets those flags in the compiler context

爲了進行比較,你可以看到,在Python 3,__future__.py仍然是相同的,幷包含了所有的信息相同,但在future.cnone of the features actually set any flags因爲所有這些功能默認情況下,在Python 3

+0

注意:截至我寫這篇文章的時候,所有的行號鏈接都是準確的。我無法弄清楚如何讓hgweb鏈接到特定的修訂版,以便它們在將​​來不會變壞。如果有人想編輯鏈接以使其更加永久,那麼他們應該這樣做。 – hobbs

+0

所以Python解釋器實際上知道'from __future__ import xyz'並專門處理它(不同於'from ordinary_module import xyz')? –

+0

@JasonS正確。它就像其他語言的編譯指示或編譯指示。 – hobbs

相關問題