温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
如果你写过Java,就一定知道public static avoid man这个如绕口令一般的程序入口函数,即使写一个hellollwood也不可避免。相比之下,Python就简单多了,临帧起手,直接print。但如果你的Python练习时长超过两周半,就一定见过这样的写法。不管是教程里的示例、github上别人的项目,还是AI生成的代码,都可能出现这一行判断语句,看起来很像Java或C加加等语言里程序入口的main函数。可既然Python不需要入口函数,为何还要多此一举加上这一句?而且Print一下这个下划线,下划线name下划线下划线变量就会发线,不管放在程序的哪个位置,它的值都是字符串。下划线下划线man下划线下划线。那么这个if条件判断岂不是毫无意义?先别着急,在搞清楚这行代码前,我先问你个问题,一个PY代码文件可以怎样?
01:00
执行。青铜选手都知道,点击IDE里的运行按钮就可以执行一个PI文件。白银选手会告诉你也可以在控制台下通过Python命令执行代码。假如你达到了黄金以上,肯定还知道一个PY文件也是一个模块,可以像其他库一样被import导入到另一个PY文件中,而被导入的同时,文件中的代码也会被执行。现在在被导入的代码中输出这个双下划线name变量,有趣的事情发生了,输出的结果不再是双下划线man,而是成了hello。看到这里你明白了吗?双下划线name这个变量,如果所在代码是直接被运行,不管是通过IDE还是命令行,它的值都是字符串双下划线man。而如果所在代码是被别的代码调用执行,比如作为模块导入,它的值就是所在文件的文件名。所以If双下划线name等于等于引号双下划线map。
02:00
这个判断不是用来指定程序的入口,而是判断当前的文件是否是被直接运行哦。那它有什么用呢?对于一些既需要直接运行又可能作为模块被其他代码复用的文件,就可以通过这个判断来控制在不同情况下执行不同的代码。另外,也有很多模块会把调用的事例或者测试的代码放在这个条件判断里,既方便又不影响使用。那我只是写一些自己用的小脚本,不被你套着,是不是就没必要这么写了?绝大多数的小脚本,比如你的课程作业,确实没有加这局的必要。不过钻石选手要说了,程序被调用执行的情况并不只有import导入这一种,比如这个采用进程池创建多进程的代码,如果直接这么运行,你的IDE就会卡到爆炸,因为每个进程都会重新执行整个脚本,再次创建一堆新的进程,直到榨干。
03:00
你的电脑这时候同样可以通过对双下划线name的判断,让子进程不要执行创建进程的代码。总结一下,Python代码中,双下划线name这个变量的值在直接运行时是字符串双下划线面,而在被导入或创建子进程执行时,它的值就是所在的文件名,于是就可以通过条件判断来区分不同的执行方式,增加了代码的灵活性和可维护性。在初学编程时,你当然可以不去用它,或者简单的照葫芦画瓢,但出于一名程序员的自我修养,我们应该知其然更知其所以然,并在合适的场景下使用他,让我们的代码更加鲁棒和优雅。好了,今天视频就到这里,我是crossing,想了解更多编程知识,请点赞、评论、转发收藏。下课。
我来说两句