python - “导入模块”和“从模块导入 *”有什么区别
问题描述
我是 python 新手,试图了解“导入模块”和“从模块导入 *”之间的区别。我在想两者都是一样的,因为它们从模块中导入了所有功能,但没有看到。我的困惑源于下面的代码——
import abc
class Minnn(ABC):
@abstractmethod
def calculate(self, x):
pass # empty body, no c
当我运行时,我收到以下错误消息“NameError: name 'ABC' is not defined”。当我用“from abc import *”替换第一个导入行时,它就可以工作了。那么为什么这会导致差异
解决方案
导入模块会在命名空间中添加一个符号,但您可以从中引用导出的对象:
# simple import
import abc
abc.ABC
abc.ABCMeta
# renamed via "as"
import abc as module
module.ABC
module.ABCMeta
当 you 时import *
,您将该模块中的所有导出符号添加到当前命名空间中,因此您可以直接引用它们而无需模块前缀:
#### YOU PROBABLY SHOULD NOT DO THIS
from abc import *
####
ABC
ABCMeta
如果你在 shell 或 notebook 中进行黑客攻击;没有大碍。但是生产代码不应该这样做。
推荐阅读
- javascript - 我如何迭代我的多维 JSON 对象
- python - 使用 tkinter(画布)和线程播放视频时出错
- python - 使用 jwt 身份验证的蜂房
- ios - 使 UITableViewCell 适合 UICollectionView 而没有 tableView heightForRowAt
- python-3.x - python3中的苍鹭公式
- javascript - Vuetify 问题 - 尽管图像是从有效来源传入的,为什么 v-img 组件不显示任何内容?
- ios - 无法识别的选择器发送到来自 Facebook SDK 的类
- python - 跨一维的 TensorFlow 广播
- regex - 如何在同一行上通过逗号输出多个正则表达式匹配
- angular - 为什么我的 Angular 自定义验证器不会使我的表单无效?