我开始学习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__
中有更多功能)时我会得到不同的行为,我的脚本可能会停止然后工作。
答案 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已启用大部分功能,因此请从division
,print_function
,absolute_import
和unicode_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上得到的。