“从模块导入 *” 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 “导入模块”的主要内容,如果未能解决你的问题,请参考以下文章

python中import 和from import的区别

导入模块:__main__ vs import as module

LayaBox---TypeScript---模块解析

从模块中动态导入所有内容 ( * )

从模块导入 myfunctions 的 azure pyspark;没有模块名称

python模块导入的问题