java中的接口是类吗
275
2022-09-03
一文弄懂Python中的 if __name__ == __main__(简书 python)
1. 引言
在Python相关代码中,我们经常会遇到如下代码段:
# stuffif __name__ == "__main__": # do stuff
本文将尽可能使用简单的样例来解释这里发生了什么,以及需要使用if __name__=="__main__"的情形。请注意,上述代码中name和main前后有2个下划线字符。
闲话少说,我们直接开始吧!
2. 特殊变量
当我们正常运行我们的Python脚本时,该脚本中的变量__name__的值一般为__main__。我们来看个示例:
# first.pyprint(__name__)
我们在终端中运行上述脚本,代码如下:
python first.py
输出如下:
__main__
观察上述输出,当我们运行脚本first.py的时候,变量__name__的值被设置为__main__。
3. 复杂的例子
上述示例相对简单,也相对容易理解。接着我们来举个具有多个文件的例子,这里假设我们有三个脚本,分别为a.py,b.py以及c.py。
其中,a.py的内容如下:
# a.pyprint("__name__ in a.py:", __name__)from b import *from c import *
此时,b.py的内容如下:
# b.pyprint("__name__ in b.py:", __name__)
c.py的内容如下:
# c.pyprint("__name__ in c.py:", __name__)
如果我们运行命令python a.py得到结果如下:
__name__ in a.py: __main____name__ in b.py: b__name__ in c.py: c
注意在脚本a.py中我们看到__name__的值为__main__,此时在脚本b.py中__name__的值为b, 同时 c.py中__name__的值为c。这是因为我们运行的脚本为a.py,那么该脚本即a.py中变量__name__的值将会被设置为字符串__main__.
此外,脚本b.py和c.py中的变量·__name__分别保持为b和c,这是因为脚本b.py和c.py不是直接运行的脚本。而是我们运行的脚本a.py调用了b.py和c.py中的print函数。
如果我们单独运行python b.py得到结果如下:
__name__ in b.py: __main__
相应的我们运行python c.py,得到结果如下:
__name__ in c.py: __main__
观察上述两个输出,当我们直接运行脚本b.py或c.py,相应的脚本里的变量__name__都将被设置为__main__。
4. 使用场景
作为Python开发者,我们通常会在一个项目工程中创建多个Python文件而不是将所有代码都写在一个Python文件中。因此我们通常会有一个主的Python文件用来作为项目工程的入口,同时其他文件包含一些辅助性的函数实现。
我们来看个示例,这里假设我们有两个Python文件,如下:
# main.pyfrom helper import *print(greet("bob"))
辅助函数实现 helper.py内容如下:
# helper.pydef greet(name): return "hello " + nameprint(greet("testname"))
如果此时我们运行命令 python main.py,得到结果如下:
hello bobhello testname
主要上述的import语句将从helper.py中引入所有的语句,所以helper.py中的测试语句print(greet("testname"))也将被执行。虽然我们可以通过添加注释或者屏蔽注释来达到运行main.py或helper.py来控制该测试语句的输出,但是这种情形就是语句
if __name__=="__main__" 大显身手的情形。
5. 解决方案
我们针对上述情形,进行代码整改,如下:
# main.pyfrom helper import *print(greet("bob"))
我们修改文件 helper.py内容如下:
def greet(name): return "hello " + nameif __name__ == "__main__": print(greet("testname"))
此时,我们执行命令python main.py,得到结果如下:
hello bob
注意,此时`helper.py中的变量 __name__的值为helper, 所以helper.py中的if语句不成立,进而将不会执行我们的测试语句print(greet("testname"))`.
此时,如果我们单独运行命令python helper.py ,得到结果如下:
hello testname
单独运行helper.py时,此时改脚本中的变量__name__将被设置为__main__,所以此时的测试语句将会被执行,输出相应的测试结果。
6. 总结
本文重点介绍了Python中常见的if __name__=="__main__" ,重点分析了其背后的原理和应用的场景。
您学废了嘛?
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~