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中执行时,值为模块名 demo1if条件不满足,下面的代码不会执行
  • 直到demo1中代码执行完毕后,也就是 import demo1 执行完毕,程序接着往下执行(本示例中后面没有代码,程序到此已执行完毕)

 

posted on 2023-04-08 21:21  木去  阅读(99)  评论(0)    收藏  举报