栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果我只是从numpy模块引用它,为什么我必须从numpy导入它

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果我只是从numpy模块引用它,为什么我必须从numpy导入它

简短答案

这是因为

numpy.matlib
它的一个可选子包
numpy
必须单独导入。

使用此功能的原因可能是:

  • 特别是对于
    numpy
    numpy.matlib
    子模块重新定义
    numpy
    函数以返回矩阵而不是ndarrays,这是许多人可能不希望使用的可选功能
  • 更一般而言,加载父模块而不加载许多用户可能并不经常需要的潜在加载缓慢的模块
  • 可能是名称空间分离

当您导入时

numpy
没有子包时
matlib
,Python将寻找
.matlib
numpy
包的属性。
numpy
没有导入,尚未分配此属性
numpy.matlib
(请参见下面的讨论)

子模块和绑定

如果您想知道为什么

np.matlib.identity
无需使用关键字就可以工作
npm
,那是因为在导入子模块时
matlib
,将为父模块
numpy
(以
np
您的情况命名)提供一个
matlib
绑定到子模块的属性。这只有在您首先定义时才有效
numpy

从参考:

当使用任何机制(例如importlib API,import或import-from语句或内置 import
())加载子模块时,在父模块的名称空间中将绑定到子模块对象。

导入和__init__.py

导入内容的选择

__init__.py
在模块目录中模块的相应文件中确定。您可以使用该
dir()
函数查看各个模块定义的名称。

>> import numpy>> 'matlib' in dir(numpy)# False>> import numpy.matlib>> 'matlib' in dir(numpy)# True

另外,如果您直接查看

__init__.py
文件,
numpy
则会看到没有导入
matlib

子模块之间的命名空间

如果您想知道如何 平滑地 复制名称空间;

matlib
源代码运行此命令在复制
numpy
命名空间:

import numpy as np   # (1)...# need * as we're copying the numpy namespacefrom numpy import *  # (2)...__all__ = np.__all__[:] # copy numpy namespace        # (3)

第(2)行

from numpy import*
特别重要。因此,您会注意到,即使只是导入
numpy.matlib
,仍可以使用所有
numpy
模块而无需导入
numpy

没有第(2)行,第(3)行中的名称空间副本将仅附加到子模块。有趣的是,由于第(3)行,您仍然可以像这样执行一个有趣的命令。

import numpy.matlib    numpy.matlib.np.matlib.np.array([1,1])

这是因为将

np.__all__
附加到的
np
of
numpy.matlib
(它是通过行(1)导入的)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号