init.py是Python中的什么?
阅读更多:Python 教程
介绍
在Python中,__init__.py
是一个特殊的文件名。它可以出现在一个模块的目录中,也可以出现在一个包的目录中。__init__.py
文件是模块和包的定义文件,一个空的__init__.py
文件表示一个空的模块或包。
模块中的__init__.py
文件
在Python中,任何以.py结尾的文件都可以看做是一个模块。在Python中,如果我们在一个模块中定义了一个函数或变量,我们可以在另一个模块中使用该函数或变量。但是如果我们需要在模块被导入时进行一些初始化操作,我们可以把这些操作写在__init__.py
文件中。
示例代码:
# file: mymodule/__init__.py
print("Initializing mymodule...")
def fun():
print("hello world!")
我们可以在其他文件中这样调用:
# file: main.py
import mymodule
mymodule.fun()
在运行main.py时,我们会发现先输出了”Initializing mymodule…”,再输出”hello world!”。这是因为在导入mymodule模块时,会先执行init.py文件中的内容。
包中的init.py文件
在Python中,一个包是指一个包含多个模块的目录。如果我们需要在一个包中创建一个引入该包的时候需要执行的初始化操作,我们可以把这些操作写在init.py文件中。
示例代码:
# file: mypkg/__init__.py
print("Initializing mypkg...")
__all__ = ['module1', 'module2']
在这个示例中,__all__
变量指定了在该包被导入时需要能够访问到的模块。如果没有指定__all__
变量,那么在通过from mypkg import *语句导入该包时,将只导入包中__init__.py
中的变量和函数,而不会导入其他模块。
init.py文件的用途
__init__.py
文件除了上述初始化操作外,还可以用于定义包的接口。例如,我们可以在__init__.py
中定义一个名为version的变量。
示例代码:
# file: mymodule/__init__.py
version = '1.0.0'
在其他文件中,我们就可以通过mymodule.version的方式获取该变量的值。
__init__.py
文件也可以执行给定包的自动引入。例如,我们可以懒加载定义模块。
示例代码:
# file: mypkg/__init__.py
def lazy_import(name):
mod = __import__(name)
components = name.split('.')
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
module1 = lazy_import('mypkg.module1')
这样,当我们使用mypkg.module1时,执行过程会自动引入mypkg.module1模块。
结论
__init__.py
是一个特殊的文件名,它可以出现在一个模块的目录中,也可以出现在一个包的目录中。__init__.py
文件是模块和包的定义文件,可以用于模块和包的初始化操作、定义包的接口、执行自动引入等操作。