在类/函数定义中导入语句 - 这是一个好主意吗?

Mac*_*rko 44 python import class function

我创建了一个名为的模块util,它提供了我经常在Python中使用的类和函数.其中一些需要导入功能.在类/函数定义中导入所需内容的优点和缺点是什么?它比import模块文件的开头更好吗?这是个好主意吗?

小智 48

每个导入放在文件顶部是最常见的样式.PEP 8推荐它,这是开始这样做的一个很好的理由.但这不是一时兴起,它具有优势(虽然不足以使其他一切成为犯罪).它允许一目了然地查找所有导入,而不是查看整个文件.它还确保在执行任何其他代码(可能取决于某些导入)之前导入所有内容.NameErrors通常很容易解决,但它们可能很烦人.

通过将模块保持在较小的范围内,可以避免(重要的)命名空间污染,因为您添加的只是实际模块(不,import *不计数,也可能不应该使用).在内部功能中,你会在每次调用时再次导入(因为所有内容都被导入一次,所以并非真正有害,但是不需要).


use*_*312 14

Python样式指南PEP8指出:

导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.

当然,这不是硬性规定,进口可以随心所欲.但把它们放在首位是最好的方法.您当然可以在函数或类中导入.

但请注意,你不能这样做:

def foo():
    from os import *
Run Code Online (Sandbox Code Playgroud)

因为:

SyntaxWarning: import * only allowed at module level
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不是很有用 - 它没有说明为什么*,这才是最重要的. (2认同)