你应该在很多Python脚本中见过name变量吧?它在我们的程序中经常以这样的方式出现:if__name__==__main__:main()今天,我将带大家详细了解一下这个内置变量的用法,并演示如何在你的Python模块中使用它用它。这个__name__是做什么用的?作为Python的内置变量,__name__变量(前后两个下划线)比较特殊。它是每个Python模块的必需属性,但它的值取决于您如何执行此代码。很多时候,不可能把你所有的代码都放在同一个文件里,或者你写在这个文件里的函数也可以在其他地方使用。要更有效地重用此代码,您需要从Python程序中的其他文件导入代码。因此,在__name__变量的帮助下,您可以判断代码是直接运行还是导入到另一个程序中。这个__name__变量可能取什么值?当你直接执行一个脚本时,这个脚本的__name__变量等于__main__。当此脚本被导入其他程序时,__name__变量等于脚本本身的名称。下面我举两个栗子来说明一下:情况一——直接运行脚本假设我们有一个nameScript.py,代码如下:defmyFunction():print(变量__name__的值为+__name__)defmain():myFunction()if__name__==__main__:main()当你直接执行nameScript.py时,流程是这样的:在执行所有其他代码之前,__name__变量被设置为__main__。此后,通过执行def语句加载函数main()和myFunction()的主体。然后,因为这个if语句后面的表达式为真,函数main()被调用。main()函数调用myFunction()打印出变量__main__的值。案例2-从其他脚本导入如果您需要在其他脚本中重用此myFunction()函数,例如在importingScript.py中,我们可以将nameScript.py作为模块导入。假设importingScript.py的内容如下:importnameScriptasnsns.myFunction()此时,我们有两个不同的作用域:一个用于importingScript,一个用于nameScript。让我画一张图,这样您就可以看到区别:在importingScript.py中,__name__变量设置为__main__。导入nameScript时,Python会在本地路径和环境变量PATH指向的路径中寻找对应名称的.py文件。找到后,它将运行导入文件中的代码。但是这一次,在导入时,它自己的__name__变量被设置为nameScript,然后再次加载函数main()和myFunction()的主体。但是,这次if语句之后的表达式计算结果为false,因此不会调用main()函数。导入后,返回importingScript.py。现在nameScript模块中的函数定义已经导入到当前作用域中,所以我们通过ns.myFunction()调用模块中的函数,这个函数返回模块中变量nameScript的值。如果您尝试在importingScript中打印name__变量的值,那么当您直接执行importingScript时它也会打印__main。原因是这个变量在importingScript的范围内。综上所述,今天和大家讨论了模块中__name__变量的特点,分析了不同的调用方式对其取值的影响。使用此功能,您可以将模块导入程序中使用,也可以直接将模块本身作为程序运行。
