相信初学者在学习Python的过程中,不可避免的总会遇到if __name__ == '__main__'语句,下面举个栗子说说我的理解:现在有两个py文件,A.py和B.py文件。
A.py文件代码如下:
def sayhello():
print('Hello!')
print('Hi!')
print(__name__)
在A.py文件中我们定义了一个sayhello函数,函数的内容是打印‘Hello!’,剩下两行语句是打印语句‘Hi!’和变量__name__ ,该文件运行结果如下:
Hi!
__main__
结果很简单,说明在运行A.py本身文件时,变量__name__的值是__main__。B.py文件代码如下:
import A
A.sayhello()
print('End')
可以看到,在B.py文件中,模块A被导入,运行一下,查看结果:
Hi!
A
Hello!
End
这里涉及一些语句运行顺序问题,在B.py文件中,模块A中的sayhello函数是调用时才执行的,但是A中的print语句会立刻执行(因为没有缩进,因此与def是平行级别的)。因此会先依次执行:
print('Hi!')
print(__name__)
然后执行:
A.sayhello()
print('End')
运行结果中Hi!对应于A模块中的print('Hi!'),而结果A对应于print(__name__),可见当在B文件中调用A模块时,变量__name__的值由__main__变为了模块A的名字。
这样的好处是我们可以在A.py文件中进行一些测试,而避免在模块调用的时候产生干扰,比如将A文件改为:
def sayhello():
print('Hello!')
print('Hi!')
print(__name__)
if __name__ == '__main__':
print('I am module A')
再次单独运行A.py文件时,结果中会多出‘I am module A’语句:
Hi!
__main__
I am module A
而运行B.py文件,即调用A模块时,却不会显示该语句:
Hi!
A
Hello!
End
一点粗浅理解,希望有所帮助:)