考虑到Python的官方定义Numpy应该是modu

2024-05-14 00:59:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是学Python的初学者,请别烦我

我刚刚研究了Python中的模块是类和函数的集合;相反,包只是一种在目录和子目录中标识模块的方法。因此,Python中的包不应该包含任何类和函数,NumPy应该称为“module”。我说的对吗

事实上,NumPy的官方文件说:

NumPy is the fundamental package for scientific computing with Python


Tags: 模块文件the方法函数numpy目录package
3条回答

这些术语通常使用得很模糊,但理论上是这样的——模块是类和函数的集合,而包是(一个或多个)模块的集合。然而,很少有包只包含一个模块而没有支持代码的情况,因为任何包都可能希望提供__version____all__等,或者子包提供提供与导入相关的帮助函数的方法等

所以numpy肯定是一个包,因为它包含几个子包(docrandomfft等等)。当然,它也是一个模块,因为它有“顶级”类和函数(例如numpy.array

正如其他答案所表明的,numpy在技术上是一个包(一个可导入事物的目录),但在本例中,我认为您引用的句子使用的是另一种意义上的术语:包是您可以安装的东西。PyPI是Python包的索引,pip代表pip安装包。PyPI和pip都可以处理单文件模块。在本例中,包是可安装到Python环境中的任何内容的通用术语

NumPy是一个包。包由文件__init__.py表示:

>>> import numpy as np
>>> np
<module 'numpy' from '.../site-packages/numpy/__init__.py'>

当您查看这个相当长的文件时,会发现许多导入:

from . import core
from .core import *
from . import compat
from . import lib
from .lib import *

因此,直接导入__init__.py的所有名称在包级别都可用:

>>> np.array
<function numpy.core.multiarray.array>

但是正如您所看到的,函数array实际上位于包目录层次结构的深层。由于总是键入numpy.core.multiarray.array是相当烦人的,因此将此函数导入__init__.py非常有意义,因为现在您可以键入np.array

相关问题 更多 >