Python中的" if __name__ == ‘__main__’ "
"if __name__ == __main__"这行代码主要的作用是调试某个模块的正确性。
- script1.py
>>>print(f'The __name__ from script1 is "{__name__}"')
The __name__ from script1 is "__main__"
一般情况下,当一个py文件运行时,解释器解释代码,并且把 '__main__'
赋值给 __name__
- script2.py
>>>import script1 # The print statement gets executed upon import
>>>print(f'The __name__ from script2 is "{__name__}"')
The __name__ from script1 is "script1"
The __name__ from script2 is "__main__"
我们可以看到,导入script1.py文件时,script1.py文件中的打印输出语句,就会文件名'script1'
赋值给 __name__
,而解释器就会把当前'__main__'
赋值给 __name__
。既然__name__
的值不同,我们可以利用 if条件语句来运行不同的代码。
- script3.py
def add(a, b):
return a+b
if __name__ == "__main__":
print(add(2, 3)
#输出:
5
当我们运行这个 script3.py文件时,__name__
关键字的值肯定是'__main__'
,因此也会进入if条件判断语句执行后面的代码。
- script4.py
import script3
print(f"{script3.__name__}")
#输出:
script3
当你在script4.py文件导入 script3 模块时,运行script4.py文件,script3.py文件中的 if判断语句下的 print(add(2,3))
是不会执行的。因为此时script3.py文件__name__
的值是script3
,而不是'__main__'
。
- 一次测试案例
- __main__.py
from src.add import add
from src.sub import sub
def who_are_you():
print("Who are you")
who_are_you()
在当前目录下创建一个名为src的文件夹,里面创建add.py文件和sub.py文件
- add.py
def add():
print("这是一个加法")
add()
- sub.py
def sub():
print("这是一个减法")
sub()
当我们运行__main__.py
文件时
#输出:
这是一个加法
这是一个减法
Who are you
会发现分别输出了当前函数和其他两个函数的print内容。
如果在sub.py中添加 if __name__ == '__main__'
def sub():
print("这是一个减法")
if __name__ == '__main__':
sub()
再次执行__main__.py
文件时
#输出:
这是一个加法
Who are you
从结果可以看到,并没有调用sub.py
文件。这种情况与script3.py文件 和 script4.py文件 的情况是一样的。
总结:if __name__ == '__main__'
主要是用来调试模块中代码的正确性。