“导入模块”和“从模块导入*”之间有什么区别

时间:2019-05-03 11:12:37

标签: python

我是python的新手,试图了解“导入模块”和“从模块导入*”之间的区别。我在想这两者是相同的,因为它们从模块中导入了所有功能,但看不到。我的困惑源于以下代码-

import abc
class Minnn(ABC):
    @abstractmethod
    def calculate(self, x):
        pass  # empty body, no c

运行时,出现以下错误,提示“ NameError:未定义名称'ABC'”。当我用“ from abc import *”替换第一条导入行时,它可以工作。那为什么会造成差异

1 个答案:

答案 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

如果您要入侵外壳或笔记本电脑;没什么大不了的。但是生产代码不应该这样做。