2012-03-27 21 views
9

我開始學習Python,但我不得不使用v2.6.2解釋器。我應該在Python v2.6.2中導入什麼__future__特性?

我想盡可能接近到Python 3,例如,使用帶新print功能,「真」師等

from __future__ import division 
from __future__ import print_function 
print(1/2, file=sys.stderr) # 0.5 

我應該從__future__導入其它什麼特徵?

我想我可以做一個普通import __future__但後來當我升級到更高版本(V2.7可能在__future__更多功能),我會得到不同的行爲,和我的腳本可能會停止工作然後。

+0

你確定這是明智的嗎?如果您被迫使用Python 2.x,並且您開始以Python 3.x的風格編寫代碼,那麼不會有誰強迫您使用2.x抱怨? – 2012-03-27 21:35:03

+1

@DavidHeffernan:不,我可以寫我的腳本,但我想要。只是我在一臺安裝了Python v2.6.2的舊電腦上,另外安裝Python v3似乎不是一種選擇。 – Frank 2012-03-27 21:36:19

+1

安裝Python 3完全是一個選項 – Amber 2012-03-27 21:37:43

回答

7

好,就算有不documentation, __future__也有關於自身的一些信息定期模塊:

>>> import __future__ 
>>> __future__.all_feature_names 
['nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals'] 
>>> __future__.unicode_literals 
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072) 

Python 2.6中有大部分已經啓用的功能,所以從division選擇,print_functionabsolute_importunicode_literals

否,import __future__將不會按照您的想法工作。當您使用from __future__ import something表單作爲文件中的第一條語句時,這只是一種魔力。有關更多信息,請參閱the docs

當然,不管你從__future__導入多少,在3.x中你都會得到不同的行爲。

+0

我會跳過'unicode_literals',看到http://stackoverflow.com/questions/809796/any-gotchas-using-unicode-literals-in-python-2-6 – agf 2012-03-27 21:49:58

+1

@agf這些都是該代碼可能打破,如果方式你只是盲目地添加'unicode_literals',但他們只是指出那些本來應該修正的事情。 Python 3的unicode方法更簡單明瞭。 – 2012-03-27 21:59:49

+0

@KarlKnechtel無論是尼克Coglan或雷蒙德赫廷傑reccomended反對使用它,認爲它包括在'__future__'是一個錯誤。我不記得它是在SO還是在博客文章中。我剛剛使用了這個鏈接,因爲我現在找不到我正在考慮的那個。 – agf 2012-03-27 22:03:11

7

我應該從__future__導入哪些其他功能?

爲了獲得最先進的日期的行爲,你當然應該導入每__future__功能。該功能提供的,除了你反正那些的。 (系統設置方式,老的功能沒有,即使他們是永遠在線的下降。)

注意import __future__給你的一切,也不會from __future__ import *from ... import ...語法是專門爲__future__(它是如何工作的),但__future__仍然是一個真正的模塊,您可以用import __future__導入。但是,這樣做會讓您知道實際功能名稱以及有關何時(或預計會)默認設置以及何時可用的信息。

>>> [ 
...  name for name in __future__.all_feature_names if 
...  getattr(__future__, name).optional <= 
...  sys.version_info < 
...  getattr(__future__, name).mandatory 
... ] 

['division', 'print_function', 'unicode_literals'] 

是我在2.7.2上得到的。

相關問題