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