我应该在Python v2.6.2中导入哪些__future__功能?

时间:2012-03-27 21:33:19

标签: python python-3.x python-2.6 python-module

我开始学习Python,但我不得不使用v2.6.2解释器。

我希望尽可能接近Python 3,例如,使用新的print函数,“true”除法等。

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

我应该从__future__导入哪些其他功能?

我想我可以做一般import __future__但是当我升级到更高版本(v2.7可能在__future__中有更多功能)时我会得到不同的行为,我的脚本可能会停止然后工作。

2 个答案:

答案 0 :(得分: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已启用大部分功能,因此请从divisionprint_functionabsolute_importunicode_literals中选择。

不,import __future__不会像你想的那样奏效。当您使用from __future__ import something表单作为文件中的第一个语句时,这是唯一的魔力。有关详情,请参阅the docs

当然,无论您从__future__导入多少,都会在3.x中获得不同的行为。

答案 1 :(得分:7)

  

我应该从__future__导入哪些其他功能?

要获得最新的行为,您当然应该导入所提供的每个__future__功能,除了您获得的功能。 (系统设置的方式,旧功能即使在它们始终开启后也不会掉线。)

请注意,import __future__ 会为您提供所有内容,from __future__ import *也不会。 from ... import ...语法是__future__特殊的({1}}(这是它的工作方式),但__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上得到的。