gpt4 book ai didi

python - 导入整个 python 模块不允许使用子模块

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:41 24 4
gpt4 key购买 nike

我的问题特定于 scikit-learn python 模块,但我也遇到了与 matplotlib 类似的问题。

当我想使用 sklearn 时,如果我只是执行“import sklearn”然后调用我需要的任何子模块,比如“sklearn.preprocessing.scale()”,我会得到一个错误“AttributeError:‘模块’对象没有属性‘预处理’”

另一方面,当我执行“from sklearn import preprocessing”时然后使用 'preprocessing.scale()' 它正常工作。

当我使用 Numpy 等其他模块时,只需“导入 numpy”就足够了,而且效果很好。

因此,我想问问有没有人能告诉我为什么会这样,我是不是做错了什么?

谢谢。

最佳答案

在目录内的__init__.py 文件中定义了一个python 包。该文件确定是否包含子模块。

当您执行 import sklearn 时,python 会找到文件 sklearn/__init__.py 并执行它以创建 sklearn 模块。此对象绑定(bind)到名称 sklearn子模块不会被解释器隐式导入。

然而,当执行 from sklearn import preprocessing 时,python 将像以前一样首先加载 sklearn 模块。然后它将检查 preprocessing 是否是该模块的属性(例如函数),如果不是,它将查找文件 sklearn/preprocessing.py 并导入该模块也是。

碰巧 numpy 在它的 __init__.py 文件中做了类似下面的事情:

import .random

因此,当将 numpy 作为 import numpy 导入时,该模块的执行会触发 numpy.random 的导入,然后将其添加为属性。


这很有用,因为有时您只想使用包的一部分,而加载所有包可能会花费大量时间。例如,导入 numpy 确实 需要大约半秒的时间。如果您只需要其功能的一小部分,这就是浪费时间。


您可能有兴趣阅读 documentation for packages .

关于python - 导入整个 python 模块不允许使用子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38143991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com