参考文章:if name == ‘main’: 到底是个啥?
Python中“if name==‘main’:”详细解析
首先创建一个test1.py的文件
def f():
print('函数内部')
print('test1程序入口')
print(__name__)
f()
print('test1结束')
前面是函数定义,下面是print语句加函数调用
执行这个程序,结果是:
我们可以发现在test1.py文件中之心的时候,__name__的值是__main__
那么如果加上这句if __name__ == '__main__',结果会不一样吗?
def f():
print('函数内部')
if __name__=='__main__':
print('test1程序入口')
print(__name__)
f()
print('test1结束')
结果和之前没有任何区别
此时,我们在创建另一个文件test2.py,同时把当前的test1.py导入过去,
def f():
print('函数内部')
print('test1程序入口')
print(__name__)
f()
print('test1结束')
test2.py
import test1
print('test2程序入口')
print(__name__)
执行test2.py:
我们发现在test2.py文件中导入test1,运行代码的时候,把test1内的代码也执行了
其实在使用import的时候,python会把导入的模块一起执行。
Python解释器在导入模块时,会将模块中没有缩进的代码全部执行一遍(模块就是一个独立的Python文件)。开发人员通常会在模块下方增加一些测试代码,为了避免这些测试代码在模块被导入后执行,可以利用__name__属性。
如果我们只是想在test2中可以用test1内定义的函数或者类,并不想test1某些代码被执行,这里就可以添加上if __name__ == '__main__'
test1def f():
print('函数内部')
if __name__=='__main__':
print('test1程序入口')
print(__name__)
f()
print('test1结束')
test2
import test1
print('test2程序入口')
print(__name__)
执行test2
这时test1中的某些代码并没有执行,是因为在test2中点击执行时,test2中的__name__为__main__,test1作为被导入的模块,import时也会执行,但是它里面的__name__此时就是模块名称,即test1。
此时 if __name__ == '__main__'判断为False,所以下面的代码就不会执行了
所以:
当 .py 直接运行的时候 __name__的值是__main__ 而当 .py 被当作模块导入的时候 __name__的值是**模块**的名称
所以如果我们的文件需要被导入到其他模块中时,为了不让别人一导入就执行全部代码,所以使用if __name__ == '__main__'之后,其中的代码就不会被执行了



