if __name__ =='__main__'的作用是:
- 当.py文件被直接运行的时候,if __name__ =='__main__':下方的代码会被执行;
- 当.py文件以模块形式被导入时,if __name__ =='__main__'下代码不会被执行。
比如有demo1.py文件,文件内的代码如下:
# -*- coding: utf-8 -*- def func1(): print('demo1 func1') print('demo1') if __name__ == '__main__': print('demo1 main')
demo2.py文件代码如下:
# -*- coding: utf-8 -*- import demo1 # demo1 仅保留本行代码,去掉其他所有,也会输出demo1 print('demo2') demo1.func1() # demo1 func1 print(demo1.__name__) # demo1 if __name__ == '__main__': demo1.func1() # demo1 func1
在demo2中,demo1作为模块被导入,运行demo2.py文件,demo1文件中if __name__ == '__main__':下面的代码并不会执行,而如print('demo1') 这行代码则在导入时就被执行。
模块导入的程序执行
有demo1.py文件,代码如下:
# -*- coding: utf-8 -*- print(f'demo1- __name__: {__name__}') if __name__ == '__main__': print('demo1 main')
demo2.py代码如下:
# -*- coding: utf-8 -*- import demo1 # 直接运行,程序执行结果如下 # demo1- __name__: demo1
- 运行demo2.py文件时,程序从上往下执行,执行到 import demo1 ,导入demo1模块,开始执行demo1中的代码,demo1中的代码也是从上往下执行;
- 执行到 print(f'demo1- __name__: {__name__}') ,由于是导入到demo2中执行的,__name__的值是demo1.py模块名,也就是demo1,所以输出:demo1- __name__: demo1
- 程序接着往下执行,到 if __name__ == '__main__': ,同上,demo1中的__name__在demo2中执行时,值为模块名 demo1,if条件不满足,下面的代码不会执行
- 直到demo1中代码执行完毕后,也就是 import demo1 执行完毕,程序接着往下执行(本示例中后面没有代码,程序到此已执行完毕)
浙公网安备 33010602011771号