2,072
社区成员




Python 技能树的所有 Python 代码,都含有下面这行代码:
if __name__=="__main__":
例如:
if __name__=="__main__":
print("Hello, World")
这行代码的作用是什么呢?这里给出明确的解释:
在 Python 中,每个模块都有一个名称,该名称存储在全局变量 __name__
中。
python a.py
运行模块时,Python解释器会a.py
所在的模块名称__name__
指定为 "__main__"
python b.py
,并且在b.py
里面含有import a
这样的将a.py
导入,那么a.py
所在的模块名称__name__
则为a
这意味着:
可以通过检查 __name__ 变量来确定模块是作为程序的入口点运行还是作为库导入到其他模块中。
例如,如果有两个python文件a.py
,b.py
代码分别是:
a.py:
def add(a, b):
return a + b
print("a.py模块的__name__变量是:", __name__)
if __name__ == "__main__":
print("a.py是程序主入口")
b.py
import a
print("b.py模块的__name__变量是:", __name__)
if __name__ == "__main__":
print("b.py是程序主入口")
print(a.add(1, 2))
现在,我们分别实验下:
执行python a.py
,输出:
a.py模块的__name__变量是: __main__
a.py是程序主入口
执行python b.py
,则分别输出:
a.py模块的__name__变量是: a
b.py模块的__name__变量是: __main__
b.py是程序主入口
3
因此,if __name__=="__main__"
: 的作用是
通常在这个条件下编写的代码用于:
a.py
,可以被b.py
导入使用,但是你也可以直接执行python a.py
让a.py
在它自己的if __name__ == "__main__":
代码块下执行一些测试代码。--end--
持续学习
那么:下一个问题是,Python允许全局执行代码,为什么Python技能树的所有程序主入口代码都一定要加上这行呢?这是因为,这样写代码:
补充刚刚说的, 就和楼主说的意思一样
在程序作为主模块运行时执行一些特定代码
而在程序被导入为模块时不执行这些代码。
print("a.py是程序主入口") # 在a.py 的 主函数下面
这段话因为python b.py 引用
所以只是引用了a.py --> a.py模块的__name__变量是: a
因为是被引用的,所以没有被输出
if name == "main": 下面的内容
简而言之, python 后面跟的模块名,是可以被 if name == "main": 当中 name 所替代,取决于 是不是被其他模块调用
a.py中
soga~
持续学习
这段解释非常详细,完整地解释了 if name=="main": 的作用。总结一下,这段代码的作用是在程序作为主模块运行时执行一些特定代码,而在程序被导入为模块时不执行这些代码。这个条件通常用于测试模块或执行模块的初始化操作。当我们直接运行某个 .py 文件时,该文件会作为主模块运行,此时 if name=="main": 中的代码会被执行;当我们将该文件导入为模块时,if name=="main": 中的代码则不会被执行。