在Python中,每个模块都有一个内置的属性 __name__
。这个属性是一个字符串,它表示模块的名字。这个属性在模块被导入到其他程序中或者作为主程序运行时会有不同的值。
1. 当模块被直接运行时
如果模块是直接被Python解释器运行的(即作为主程序),那么 __name__
的值就会被设置为 '__main__'
。
例如,如果你有一个名为 my_module.py
的文件,并且你直接运行它(比如通过命令行 python my_module.py
),那么在这个模块内部的 __name__
的值就是 '__main__'
。
2. 当模块被导入到其他程序中时
如果模块是被其他Python程序导入的,那么 __name__
的值就会是模块的名字(不带 .py
后缀)。
例如,如果你有一个名为 my_module.py
的文件,并且你在另一个Python文件中通过 import my_module
导入了它,那么在 my_module.py
文件内部的 __name__
的值就是 'my_module'
。
使用场景
这个特性经常被用来编写既可以作为主程序运行,也可以被其他程序导入的模块。通过检查 __name__
的值,模块可以确定自己是作为主程序运行还是被其他程序导入,从而执行不同的代码。
例如:
# my_module.py
def my_function():
print("Function was called!")
if __name__ == '__main__':
print("Module is being run directly")
my_function()
else:
print("Module has been imported into another module")
如果你直接运行 my_module.py
,输出会是:
Module is being run directly
Function was called!
但是如果你从另一个Python文件中导入 my_module
,输出只会是:
Module has been imported into another module