我是python的新手,试图了解“导入模块”和“从模块导入*”之间的区别。我在想这两者是相同的,因为它们从模块中导入了所有功能,但看不到。我的困惑源于以下代码-
import abc
class Minnn(ABC):
@abstractmethod
def calculate(self, x):
pass # empty body, no c
运行时,出现以下错误,提示“ NameError:未定义名称'ABC'”。当我用“ from abc import *”替换第一条导入行时,它可以工作。那为什么会造成差异
答案 0 :(得分:3)
导入模块会在名称空间中添加一个符号,但是您可以从中引用导出的对象:
# simple import
import abc
abc.ABC
abc.ABCMeta
# renamed via "as"
import abc as module
module.ABC
module.ABCMeta
import *
时,您将从该模块中导出的所有符号都添加到当前名称空间中,因此可以直接引用它们而无需模块前缀:
#### YOU PROBABLY SHOULD NOT DO THIS
from abc import *
####
ABC
ABCMeta
如果您要入侵外壳或笔记本电脑;没什么大不了的。但是生产代码不应该这样做。