“从模块导入 *” VS “导入模块”
Posted
技术标签:
【中文标题】“从模块导入 *” VS “导入模块”【英文标题】:“from module import *” VS “import module” 【发布时间】:2021-12-08 07:07:08 【问题描述】:
from module import *
VS import module
我知道的
我知道两者的区别,区别在于当你使用from module import *
时,你可以只引用模块中的类、函数等,就像它们在它们自己导入的文件中定义一样。
但是当你只是使用import module
时,你必须在对象名称前使用module.
来引用它。
问题
所以我不知道为什么有时使用from module import *
而不是import module
被认为是不好的做法?
【问题讨论】:
仅导入您需要的内容:use-import-module-or-from-module-import - 执行 * import 会使您的命名空间变得混乱。在你的厨房里,你更喜欢一个装锅的抽屉,另一个装刀叉勺子的抽屉和一个装保鲜膜(urks)等的抽屉,还是你想要各种各样的刀,保鲜膜,锅、 叉子和勺子飞来飞去。对于导入,情况更是如此:如果您只是将它们全部放入命名空间中,可能会出现名称冲突。 【参考方案1】:PEP 8 声明
应避免通配符导入 (
from <module> import *
),因为它们 不清楚命名空间中存在哪些名称,令人困惑 阅读器和许多自动化工具。有一种合理的用途 通配符导入的情况,即重新发布内部 接口作为公共 API 的一部分(例如,覆盖纯 接口的 Python 实现,其定义来自 可选的加速器模块以及确切的定义将是 被覆盖是事先不知道的)。
【讨论】:
以上是关于“从模块导入 *” VS “导入模块”的主要内容,如果未能解决你的问题,请参考以下文章
导入模块:__main__ vs import as module