我已经查看了__future__.py的源代码,但是它对我来说毫无意义——它如何实际改变除法的行为?
这个模块只是为了记录和内省而存在,它里面所有的代码实际上并不执行任何操作。
在编译一个模块时,Python会调用PyFuture_FromAST来检查from __future__ import
语句是否有效,如果有效,就会在PyFutureFeatures
对象上设置相应的标志。然后编译器会在编译模块之前去将那些标志设置到编译器上下文中,最后才进行实际的编译。
相比之下,在Python 3中,__future__.py
仍然是一样的,包含所有相同的信息,但在future.c
中,没有任何特性设置任何标志,因为所有这些特性在Python 3中默认启用。
from __future__ import xyz
并对其进行特殊处理(与from ordinary_module import xyz
不同)吗? - Jason S
compiler_flag
可能会向编译器发出信号,要求改变除法。 - Natecatimport
的工作原理;我以为它会评估相关模块,然后创建一个模块对象,可以完整地或通过单个属性(from xyz import abc
)引入命名空间范围。但是看到__future__.py
,似乎如果该模块被评估,则应启用所有功能。from __future__ import XYZ
如何挑选在__future__.py
中创建对象? - Jason S