page contents

秒懂Python编程中的if __name__ == 'main' 作用和原理

在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == 'main': 1 这段代码的功能 一个python的文件有两种使用的方法: 第一是直接作为脚本执行, 第二是import到其他的python脚...

在大多数编排得好一点的脚本或者程序里面都有这段

if __name__ == 'main':

1 这段代码的功能

一个python的文件有两种使用的方法:

第一是直接作为脚本执行,

第二是import到其他的python脚本中被调用(模块重用)执行。

因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

如下面test.py代码所示:

print "I'm the first."if __name__=="__main__":    print "I'm the second."

并直接执行test.py,结果如下图,可以成功print两行字符串。即,if __name__=="__main__": 语句之前和之后的代码都被执行。


v2-2d294e650db574b539f657ee6f972903_hd.jpg


然后在同一文件夹新建名称为import_test.py的脚本,只输入如代码:

import test

执行import_test.py脚本,输出结果如下:


v2-7d3e05ee925a2253ad35ab1b0d1e1934_hd.jpg


只输出了第一行字符串。即,if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

2 运行的原理

每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。

而“__main__”等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,__name__ == 'main'结果为真。

同样举例说明,我们在test.py脚本的if __name__=="__main__":之前加入print __name__,即将__name__打印出来,文件内容和结果如下:


v2-d2c83b7af57485d7ad1dca5da7beaa70_hd.jpg


可以看出,此时变量__name__的值为"__main__",再执行import_test.py,模块内容和执行结果如下:


v2-4277de6d1ef195666cd878f5add70476_hd.jpg


此时,test.py中的__name__变量值为test,不满足__name__=="__main__"的条件,因此,无法执行其后的代码。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  • 发表于 2020-02-13 16:29
  • 阅读 ( 902 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章