是否只有一个“单一的”;“未来”;python中的宇宙?
正如在另一篇post()中所解释的,在python中,您可以从将来导入内容 例如,2/4的计算结果为0(因为它是整数除法) 但如果从将来导入“division”,则其计算结果为0.5是否只有一个“单一的”;“未来”;python中的宇宙?,python,Python,正如在另一篇post()中所解释的,在python中,您可以从将来导入内容 例如,2/4的计算结果为0(因为它是整数除法) 但如果从将来导入“division”,则其计算结果为0.5 >>> from __future__ import division >>> print 2/4 0.5 我从链接文章中了解到,当您使用将来的导入时,解析器解析代码的方式不同 我的问题是,是否只有一个独特的“未来”环境,所有这些未来的导入都是从这个环境中获取的 我们如何保证将
>>> from __future__ import division
>>> print 2/4
0.5
我从链接文章中了解到,当您使用将来的导入时,解析器解析代码的方式不同
我的问题是,是否只有一个独特的“未来”环境,所有这些未来的导入都是从这个环境中获取的
我们如何保证将来的导入将与python编译器的未来版本向前兼容
是否有可能在“更遥远的未来”中,2/4将评估为其他值?如果您查看导入
\uuuuuuuuuuuuuuuuuu
有一个名为所有特性名称的列表,您可以使用该列表查看python解释器的可用特性
import __future__
print(__future__.all_feature_names)
在我的机器上,它将在Python 2.7.12上返回以下内容
['nested_scopes', 'generators', 'division', 'absolute_import',
'with_statement', 'print_function', 'unicode_literals']
以及Python 3.5.2
['nested_scopes', 'generators', 'division', 'absolute_import',
'with_statement', 'print_function', 'unicode_literals',
'barry_as_FLUFL', 'generator_stop']
但是,不能保证您正在运行的Python解释器将具有相同的可用功能,导入甚至可能不存在于某些实现中,但假设该功能可用,则实现应保持不变,只要它是根据(例如)实现的,这对于大多数Python解释器来说都是如此。未来的特性不会改变其含义。保证来自未来导入x的具有以下三种行为之一:
在定义未来行为之前的Python版本上,会引发异常,指示代码不兼容
在Python版本上,在行为成为默认行为之前,它会启用该行为
在Python版本上,当行为成为默认行为后,导入被识别,但被忽略
他们以后不会重复使用名称来表示其他内容(因为这将违反#3的“已识别但已忽略”规则)。如果他们决定再次更改,比如说,division
,他们需要使用一个新名称,例如,为了使其向零除法而不是地板除法截断,他们可能会进行名为截断除法的导入。但只要Python存在,它们就不会删除除法,也不会改变其含义:
不会从\uuuu future\uuuu
中删除任何功能描述
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。将来没有人会需要这个。是的。未来的环境称为Python 3。@furas:绝对不是。它在Py3中用于新事物,甚至现在也用于生成器_stop
()。但一旦未来到来,进口国就什么都不干了;它们被识别,但被忽略(因为默认语法已经包含它们)。如果您导入的Python版本中还不存在的东西(例如,在2.4中导入带有_语句的
),您会得到一个异常,让您知道该代码与旧版本的Python不兼容。请注意,from uuu future uu导入barry FLUFL
是\uu future uu
导入。:-)@ShadowRanger从未来导入大括号怎么样
['nested_scopes', 'generators', 'division', 'absolute_import',
'with_statement', 'print_function', 'unicode_literals',
'barry_as_FLUFL', 'generator_stop']