`from foo import spam`优于`来自foo import *`的优点

时间:2012-02-02 11:24:16

标签: python

  

可能重复:
  Should wildcard import be avoided?

除了from foo import spam之外,from foo import *提供的优势除了不导入每个函数外还有什么优势?

它能节省内存吗?或者它只是语法糖,但实际上进口一切? 哪里可以找到更多相关信息?

如果确实可以节省内存,那该怎么办?

4 个答案:

答案 0 :(得分:3)

使用未明确导入的名称对全局命名空间进行污染是一个坏主意。它使您无法确定以后在代码中使用的名称实际上是从哪里导入而无需读取已导入的每个模块的源代码,并且使用相同的名称冒险使用两个模块,这可能会破坏事情。

答案 1 :(得分:2)

导入*会导入foo中存在的所有内容, 导入垃圾邮件只会导入所需的属性。

这就像在代码中使用未使用的变量/方法一样。 如果您开始使用像pylint这样的代码对代码进行评级,那么使用未使用的变量和方法会降低评级

答案 2 :(得分:1)

如果您需要foo的所有内容或大部分from foo import *,那么spam会更好,但如果您只需要from foo import spam,则{{1}}会为您完成此任务。

答案 3 :(得分:1)

除了其他原因外,还有一点是导入表单: from foo import spam 有帮助的是它提高了代码的可读性。通过查看上面的语句,很清楚依赖当前模块对模块foo的影响。