3 回答

TA貢獻1829條經驗 獲得超7個贊
通過__future__包含模塊,您可以逐漸習慣于不兼容的更改或引入新關鍵字的更改。
例如,對于使用上下文管理器,您必須from __future__ import with_statement在2.5中進行操作,因為with關鍵字是new,并且不再用作變量名。為了with在Python 2.5或更早版本中用作Python關鍵字,您將需要使用上面的import。
另一個例子是
from __future__ import division
print 8/7 # prints 1.1428571428571428
print 8//7 # prints 1
沒有這些__future__東西,兩個print語句都將打印出來1。
內部差異在于沒有導入時,/映射到__div__()方法,而使用導入__truediv__()。(無論如何,請//致電__floordiv__()。)
Apropos print:print在3.x中成為函數,失去其特殊屬性作為關鍵字。反之亦然。
>>> from __future__ import print_function
<built-in function print>
>>>

TA貢獻1825條經驗 獲得超6個贊
當你做
from __future__ import whatever
您實際上不是在使用import語句,而是在將來的語句。您正在閱讀錯誤的文檔,因為您實際上并未在導入該模塊。
以后的語句很特殊-它們更改了Python模塊的解析方式,這就是為什么它們必須位于文件頂部的原因。它們為文件中的單詞或符號賦予了新的(或不同的)含義。從文檔:
將來的語句向編譯器發出指令,指示應使用在將來指定的Python版本中可用的語法或語義來編譯特定模塊。將來的聲明旨在簡化向Python的未來版本的移植,從而對語言進行不兼容的更改。它允許在該功能成為標準版本之前,按模塊使用新功能。
如果您確實要導入__future__模塊,請執行
import __future__
然后照常訪問它。

TA貢獻1772條經驗 獲得超8個贊
__future__ 是一個偽模塊,程序員可以使用它來啟用與當前解釋器不兼容的新語言功能。例如,該表達式11/4當前的計算結果為2。如果執行該模塊的模塊通過執行以下命令啟用了真除法:
from __future__ import division
該表達式的11/4計算結果為2.75。通過導入__future__模塊并評估其變量,您可以看到何時將新功能首次添加到語言中以及何時將其成為默認功能:
>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
添加回答
舉報