当前位置: 首页 > 后端技术 > Python

写Python脚本,一定要加上这个!_1

时间:2023-03-25 20:21:47 Python

使用Python的人经常会写一些脚本。无论是为了提高工作效率,还是为了满足一些特定的需求,Python脚本都是一个常见而有用的东西。不过最近发现了一个之前没有注意到的问题,就是是否在脚本中加入if__name__=="__main__":这个语句其实对脚本的使用影响还是很大的,还有很多知识在里面。常见误区很多朋友在写脚本的时候比较随意。简单的脚本直接写下来,没有函数,按顺序执行。对于复杂的脚本,可以添加函数。这种写法可读性较差,人们往往无法一眼就找到程序运行的入口和顺序。Python社区比较推荐的写法是在写脚本的时候加入如下语句:defmain():#dosomethingprint("dosomething.")if__name__=="__main__":main()大多数人看到在这一点,你会不会说,有什么关系,加不加不重要!忙不过来不屑一顾,一起来仔细分解吧!什么用途?在解释if__name__=='__main__'的作用之前,我们先通过一个简单的例子来直观感受一下。#const.pyPI=3.14deftrain():print("PI:",PI)train()#area.pyfromconstimportPIdefcalc_round_area(radius):returnPI*(radius**2)def计算():print("roundarea:",calc_round_area(2))calculate()看area.py的运行结果:PI:3.14roundarea:12.56PI变量,运行时,函数train在const.py中printin()也带过来了,我们只引用变量,不引用函数,所以这是我们不想看到的。这个问题的解决方法也很简单,我们只需要在const.py中加入一句:PI=3.14deftrain():print("PI:",PI)if__name__=="__main__":train()再次运行area.py,输出如下:roundarea:12.56这是我们预期的结果。从上面程序运行入口的例子可以发现,如果没有if__name__=="__main__":,文件导入为area.py时执行const.py中的所有代码,添加后它,只会运行代码的导入部分。这就是if__name__==”__main__”的明显作用:其实if__name__==”__main__”:相当于Python模拟的程序入口。由于模块之间相互引用,不同的模块可能有这样的定义,但只能有一个入口程序,选择哪个入口程序取决于__name__的值。我们再看一个小程序:#test.pyprint("lookhere")print(__name__)if__name__=='__main__':print("I'mtest.py")程序运行结果如下:look这里__main__I'mtest.py可以发现此时变量__name__的值为__main__,所以打印“I'mtest.py”。如果运行其他文件,通过运行文件调用这个文件,语句不会打印出来,因为程序入口错误,语句不会执行。代码规范中有if__name__=="__main__":相当于Python程序也有一个入口函数,我们可以很清楚的知道程序的逻辑从哪里开始,当然我们需要有意识的把程序的开始逻辑放在这里.其实这个也是PyCharm推荐的。为什么很多优秀的编程语言,比如C、Java、Golang、C++都有一个main入口函数?我认为重要的原因之一是程序入口统一且易于阅读。多进程场景非常有用如果你使用多进程进行并行计算,代码如下:=p.map(useful_function,[1,2,3,4])print(results)运行这段代码,控制台会一直打印:parallel,程序会一直报RuntimeError。如果添加if__name__=="__main__":,程序将按预期工作:()asp:results=p.map(useful_function,[1,2,3,4])print(results)Python的多程序就是启动多个Python解释器,每个Python解释器都会导入你的脚本,复制一份供子进程使用的全局变量和函数,如果有if__name__=="__main__":,则后面的代码不会被导入,也不会重复执行。否则创建多个进程的代码会被导入执行,从而无限递归创建子进程总结if__name__=="__main__":虽然不是强制的,但是我强烈建议大家按照这个规范来做,它是约定俗成的Python社区,对应Python之禅:显式优于隐式。以上就是本次分享的全部内容。想了解更多Python知识,请前往公众号:Python编程学习圈,每日干货分享,送“J”,海量学习资料。