我对像numpy这样的图书馆工作有疑问。当我导入numpy
时,我可以访问许多内置类,函数和常量,例如numpy.array
,numpy.sqrt
等。
但是在numpy内还有其他子模块,例如numpy.testing。
这是怎么做到的?在我有限的经验中,带有子模块的模块只是带有__init__.py
文件的文件夹,而带有函数/类的模块是实际的python文件。如何创建一个也具有函数/类的模块“文件夹”?
答案 0 :(得分:23)
包含.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
等等。
您还可以通过将代码放在mypackage
中来向__init__.py
添加函数(就像您提到的numpy函数一样)。虽然这通常被认为是丑陋的。
如果你看numpy's __init__.py
,你会看到很多代码 - 其中很多是定义这些顶级类和函数。 __init__.py
代码是加载包时执行的第一件事。