我对如何使用numpy的库有问题。当我导入numpy时,我可以访问许多内置的类,函数和常量,例如numpy.array,numpy.sqrt等。具有子模块和功能的Python模块
但是在numpy中还有其他子模块,如numpy.testing。
这是如何完成的?在我有限的经验中,带有子模块的模块只是一个带有init .py文件的文件夹,而带有函数/类的模块是实际的python文件。如何创建一个也有函数/类的模块“文件夹”?
我对如何使用numpy的库有问题。当我导入numpy时,我可以访问许多内置的类,函数和常量,例如numpy.array,numpy.sqrt等。具有子模块和功能的Python模块
但是在numpy中还有其他子模块,如numpy.testing。
这是如何完成的?在我有限的经验中,带有子模块的模块只是一个带有init .py文件的文件夹,而带有函数/类的模块是实际的python文件。如何创建一个也有函数/类的模块“文件夹”?
具有.py
文件和__init__.py
的文件夹被称为package
。其中一个包含类和函数的文件是module
。文件夹嵌套可以为您提供子包。
因此,举例来说,如果我有以下结构:
mypackage
__init__.py
module_a.py
module_b.py
mysubpackage
__init__.py
module_c.py
module_d.py
我可以导入mypackage.module_a
或mypackage.mysubpacakge.module_c
等。
您也可以通过将代码放入__init__.py
中,将函数添加到mypackage
(如您提到的numpy函数)。虽然这通常被认为是丑陋的。
如果你看看numpy's __init__.py
,你会看到很多代码 - 其中很多是定义这些顶级类和函数。 __init__.py
代码是加载包时首先执行的代码。
那么它是如何导入类似numpy或scipy的库,并且包含类/函数(如模块)和其他模块(如包)。 所以我可以做numpy.array(一个类)或numpy.testing.assert ...(获取一个模块)。 – ImpGuard
我刚刚回答说,它都在'__init __。py'中。当解释器加载该包时,其中的任何函数都会有该包的头等成员。 –
啊,这就是我想知道的。我认为这会被认为是丑陋的,因为很多杂项。逻辑会进去。我认为所有的东西都是单独编码的,不知何故合并成__init__.py之后? 有这样的东西似乎相当有用,但我不知道如何复制它,而不只是在一个文件中转储大量的代码。 – ImpGuard