导入整个模块与仅从 python 中的模块导入所需的方法有啥区别? [复制]

Posted

技术标签:

【中文标题】导入整个模块与仅从 python 中的模块导入所需的方法有啥区别? [复制]【英文标题】:What's the difference between importing a whole module vs importing just the required method from the module in python? [duplicate]导入整个模块与仅从 python 中的模块导入所需的方法有什么区别? [复制] 【发布时间】:2017-05-13 01:58:18 【问题描述】:

在使用scikit learn或者其他类似的Python库时,做起来有什么区别:

import sklearn.cluster as sk
model = sk.KMeans(n_clusters=n)

还有

from sklearn.cluster import KMeans 
model = KMeans(n_clusters=n)

使用一种方式比另一种方式有什么优势吗?

【问题讨论】:

欢迎来到 ***。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。 *** 不是编码或教程服务。这在 Python 文档和许多文本中都有很好的介绍,包括硬拷贝和在线。 解释here "导入模块不会浪费任何东西;模块总是完全导入" 所以没有办法只导入 i> 来自模块的特定事物 @Prune from how to ask:“示例:很好:当我的所有输入都是整数时,为什么使用 float 而不是 int 会给我不同的结果?” -- 为什么我的问题与示例不同? 我认为这是一个很好的问题。当然,这个问题有据可查,另一个 SE 网站上也有类似的问题,但这也是一个措辞恰当的问题,有简洁明了的例子。 足够好 -- 撤回反对。我会把我的评论作为一个不好的例子留下一个很好的纠正。 【参考方案1】:

嗯,在您的第一个示例中,您已将模块 sklearn.cluster 设为可访问为 sk,您可以相应地引用其成员。在您的第二个示例中,您只导入了sklearn.clusterKMeans 的一个成员,因此只能访问该成员。这就是区别。

至于优势?做任何让你的代码更容易阅读的事情。

【讨论】:

你只导入了一个成员......所以只有一个可以访问”我会小心这个措辞。他们实际上已经导入了整个模块,只是只有kMeans可访问 这可能是语义问题。是的,整个模块都已加载(从sys.modules 可以看出),但我指的是import 关键字。

以上是关于导入整个模块与仅从 python 中的模块导入所需的方法有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 导入模块

Python基础之类与模块化

详解Python模块化——模块(Modules)和包(Packages)

Python中的模块导入无法加载Pytorch nn.Module的派生类

Python导入模块问题

python之导入模块