7

在 python 2.x 中,将两个整数相除会返回一个整数。但是,如果您使用

from ___future___ import division

你可以得到一个浮点值:

>>> 3/2
1
>>> from __future__ import division
>>> 3/2
1.5
>>> 
>>> 
>>> 3//2
1
>>> 4/3
1.3333333333333333
>>> 

之后import,您必须使用//而不是/进行整数除法。如何恢复import整数/除法?

4

2 回答 2

13

__future__导入是特殊的,无法撤消。你可以在这里阅读他们的行为。

以下是一些相关部分:

未来语句在编译时被识别和特殊处理:对核心构造语义的更改通常通过生成不同的代码来实现。甚至可能是新特性引入了新的不兼容语法(例如新的保留字),在这种情况下,编译器可能需要以不同的方式解析模块。这样的决定不能推迟到运行时。
...
在交互式解释器提示下键入的未来语句将在解释器会话的其余部分生效。

由于__future__语句是在编译时而不是运行时处理的,因此没有运行时方法可以恢复更改的行为。

使用普通模块,您可以删除或取消导入模块,方法是删除从命名空间导入的任何内容,并删除该导入的条目sys.modules(根据用例,第二部分可能不是必需的,它所做的只是强制重新加载如果再次导入模块)。

于 2012-09-19T16:34:48.477 回答
5

import语句对于您导入的文件是本地的,例如,如果您将此文件设置为example.py

from __future__ import division
print(1/2)

然后将其加载到另一个文件中:

import example # prints 0.5 because `division` is imported in example.py
print(1/2) # prints 0 because `division` is not imported in this file

因此,如果您想要仅在某些代码中使用的导入,请将该代码放在单独的文件中。

在您提供的情况下,我不确定它是否有帮助。为什么不只//在需要整数除法时使用?

于 2012-09-19T16:29:43.617 回答