4

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

我知道这作为一种编程实践是没有争议的——这是规则,而且很清楚。但是,当您未能将您置于最顶端(又名警告)时,我无法自行搜索为什么它被确定为错误而不仅仅是违反推荐做法的答案。future_statement

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

4

2 回答 2

6

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

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

其他导入的模块对您的模块中关于__future__. 这是一件好事,因为否则其他模块可能会通过print_function从导入来破坏您的模块__future__

于 2015-05-14T13:20:44.260 回答
2

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

print "yo"
from __future__ import print_function

print 语句是否是语法错误?这取决于未来的导入是适用于整个文件还是仅仅从那时起。最好明确地把它作为一个错误而不是顶部的导入。

于 2015-05-14T13:19:57.270 回答