1、理解
在大多数编排得好一点的脚本或者程序里面都有这段if __name__ == 'main': ,虽然一直知道他的作用,但是一直比较模糊,收集资料详细理解之后与大家分享。
if __name__ == “__main__”:
本质就是一个if判断,但它又不是一个简单的if判断。
即当.py文件运行时,__name__
是'__main__
' 时运行下面if下的代码,则否不运行。
2、__name__是什么
__name__是Python内置的变量,它是每个python模块必备的属性,但它的值取决于你是如何执行这段代码的。
当你直接执行一段脚本的时候,这段脚本的 __name__
变量等于 ‘__main__
'
当这段脚本被导入其他程序的时候,__name__
变量等于脚本本身的名字
场景1:直接运行脚本
假设我们有一个nameScript.py,
代码如下:
1 def myFunction(): 2 print('The value of __name__ is ' + __name__) 3 4 def main(): 5 myFunction() 6 7 if __name__ == '__main__': 8 main()
在所有其他代码执行之前,__name__
变量就被设置为 ‘__main__
' 了。在此之后,通过执行 def 语句,函数 main() 和 myFunction()
的本体被载入。接着,因为这个 if 语句后面的表达式为真 true,函数 main() 就被调用了。而 main()
函数又调用了myFunction(),
打印出变量的值'__main__
'。
场景2:从其他脚本导入
如果你需要在其他脚本里重用这个 myFunction()
函数,比如在 importingScript.py
里,我们可以将 nameScript.py
作为一个模组导入
1 import nameScript as ns 2 ns.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 的作用域中的。
标签:__,myFunction,name,nameScript,importingScript,main From: https://www.cnblogs.com/Zhouce/p/17983996