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

时间:2015-05-14 13:17:40

标签: python python-2.7 pep8 pep

PEP 236明确指出所有future_statements必须出现在模块顶部附近,只允许使用评论,文档字符串等。

我理解这不是一个有争议的编程实践 - 它是规则而且它们很清楚。但是,我不能谷歌自己回答为什么当你未能将future_statement放在最顶端时,它被认为是一个错误而不是违反建议的做法(又名警告)。

是否因为这种方式,导入future_statement将导入的自己的名称版本的模块将能够覆盖它们,从而确保它们能正常工作?是否要保持某种强大的代码清晰度,以便在__future__导入被意外忽略的情况下因为潜在的灾难而不能打破正确的编码实践? PEP对此并不具有启发性,我无法找到原因。

2 个答案:

答案 0 :(得分:6)

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

除了清晰度问题之外,还有很好的设计理由迫使这些语句处于解析和编译的开始阶段。

其他导入的模块对 模块中与__future__相关的内容没有任何影响。这是一件好事,因为否则其他模块可能会从print_function导入__future__来破坏您的模块。

答案 1 :(得分:2)

猜测,它可以避免以下情况:

print "yo"
from __future__ import print_function

print语句是否出现语法错误?这取决于将来的导入是应用于整个文件还是仅从该点开始。更好的做法是明确错误,而不是在顶部进口。