为什么呢?
有时我需要导入模块的所有属性,因此我使用通配符导入,但是我的一个Vim脚本(使用flake8作为其语法检查器)总是向我发出警告,并告诉我无法检测到未定义的名称。
使用通配符导入还有其他缺点吗?
使用它通常不是一个好主意from module import *。通配符导入会导致名称空间污染;您导入的名称超出了所需的数量,并且如果您不小心引用了导入的名称,则可能不会得到所需的NameError。
另外,如果库的未来版本添加了其他名称,则最终可能会掩盖其他名称,从而仍然导致陌生的错误:
from foo import bar
from spam import *
Run Code Online (Sandbox Code Playgroud)
如果您进行升级spam,并且现在包括,spam.bar它将替换foo.bar上一行中的导入。