为什么 Python 中的 future_statements 需要放在所有内容之前?

Why do future_statements in Python need to be placed before everything?

PEP 236 明确指出所有 future_statements 必须出现在模块的顶部附近,在它们之前只允许有注释、文档字符串等。

我知道这作为一种编程实践是没有争议的 - 这是规则而且很明确。但是,我无法 google 自己回答 为什么 当您未能将 future_statement 在最上面(也就是警告)。

是否因为这样,导入自己版本的名称的模块将能够覆盖 future_statement 将导入的名称,从而确保它们能够正常工作?是否要保持某种强大的代码清晰度,以便在 __future__ 导入被意外忽略时不会因为潜在的灾难而破坏正确的编码实践? PEP 对此没有启发,我找不到任何线索来找出原因。

猜测是为了避免以下这种情况:

print "yo"
from __future__ import print_function

打印语句是否有语法错误?这取决于将来的导入是适用于整个文件还是仅从那一点开始。最好明确指出不是顶部导入的错误。

__future__ 语句甚至可能对解析产生影响(例如:unicode_literalsprint_function),因为它们可能会修改(或者更确切地说切换到不同版本的)语法。因此,必须尽早知道它们。它们当然也会对代码生成产生影响 (division)。

因此,除了清晰度问题之外,还有充分的设计理由强制这些语句位于解析和编译的开始位置。

其他导入的模块对您的模块中关于__future__的内容没有任何影响。这是一件好事,否则其他模块可能会通过从 __future__.

导入 print_function 来破坏您的模块