【python】理解 if __name__ == "__main__'' 的作用

举报
子都爱学习 发表于 2021/11/11 20:34:23 2021/11/11
【摘要】 我们知道每个python文件既可以被直接执行,则可以作为脚本导入到其他文件中。从而构建各个模块的联系。而 if__name__ == '__main__' 的作用也是用来区分是自己作为自己的文件进行执行的,还是被导入到其他文件当做脚本使用。为了更好的区分,看如下例子:test1.pydef func(x, y): print('two number sum') return x+...

我们知道每个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__' 内部写测试代码,自己运行自己这个才可以检测的内容,但是当别人调用时,这些测试代码不会被执行。用来区分是自己执行还是别人调用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。