【python】理解 if __name__ == "__main__'' 的作用
我们知道每个python文件既可以被直接执行,则可以作为脚本导入到其他文件中。从而构建各个模块的联系。
而 if__name__ == '__main__' 的作用也是用来区分是自己作为自己的文件进行执行的,还是被导入到其他文件当做脚本使用。
为了更好的区分,看如下例子:
test1.py
def func(x, y):
print('two number sum')
return x+y
print('Perform the operation.')
# func(3, 4)
print('test1: ', __name__)
if __name__ == '__main__':
print('Perform the operation.')
# func(3, 4)
print('test1: ', __name__)
我们执行下得到:
Perform the operation.
test1: __main__
Perform the operation.
test1: __main__
test2.py
import test1
test1.func(3, 4)
print(__name__)
print(test1.__name__)
然后我们把test1.py导入到test2.py执行得到
Perform the operation.
test1: test1
two number sum
__main__
test1
if __name__ == '__main__'功能
丛上述实例可以发现:
运行test1.py文件时if __name__=="__main__": 语句之前与之后代码都被执行,当前模块名是__main__
运行test2.py,test2.py 的__name__也是__main__,但test1.py作为文件导入时,test1.py文件执行时,__name__是自己的文件名了,所以就不会执行if __name__=="__main__": 语句之后代码。test2.py访问test1.__name__也是test1
由上可知,当test1.py 作为脚本被导入到import_test2.py文件内时, ,此时test.py作为脚本导入到其他文件时被执行时的__name__已经不是原来自己执行自己的__main__了,而是变成了它自己的模块名,即__name__ = 'test1' 【没后缀】,而非__main__了。索引被导入执行的代码的__name__不满足原来的条件。而import_test.py内部的if __name__ = '__main__' 则会被执行,因为它是执行自己的代码。而非导入到其他文件内被执行。实际上if __name__=="__main__":就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个,选中哪个入口程序取决于 __name__ 的值。
总而言之:个人理解是 一个py文件自己直接被执行时,其内部的__name__ == '__main__' 。而这个py文件被导入到其他文件时执行时,这个py文件的__name__ 即不是__main__了,而是变成了这个py文件的文件名[不包含后缀.py]
作用:有了这个区别,我们就可以使用 if __name__ == '__main__' 内部写测试代码,自己运行自己这个才可以检测的内容,但是当别人调用时,这些测试代码不会被执行。用来区分是自己执行还是别人调用。
- 点赞
- 收藏
- 关注作者
评论(0)