python:if __name__ == '__main__'到底有什么用?

来源:互联网 发布:旅游 本质知乎 编辑:程序博客网 时间:2024/05/16 06:28

1、首先这句话并不是类似其他编程语言里的main()函数,python程序是自上而下执行的,不需要main入口
2、有句话经典的概括了这段代码的意义:“Make a script both importable and executable”,意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
在python编译器读取源文件的时候会执行它找到的所有代码,而在执行之前会根据当前运行的模块是否为主程序而定义变量name的值为_main_还是模块名。
因此,该判断语句为真的时候,说明当前运行的脚本为主程序,而非主程序所引用的一个模块。
当判断语句为假的时候,说明当前运行的主程序并不是该语句所在的文件,该语句所在的文件是作为一个模块被引用,这时候name 被定义为了该语句所在的模块名字(也就是文件名)
看个例子:

# file one.pydef func():    print("func() in one.py")print("top-level in one.py")if __name__ == "__main__":    print("one.py is being run directly")else:    print("one.py is being imported into another module")
# file two.pyimport one        # start executing one.pyprint("top-level in two.py")one.func()if __name__ == "__main__":    print("two.py is being run directly")else:    print("two.py is being imported into another module")

当运行python one.py,输出:

top-level in one.pyone.py is being run directly

当运行python two.py,输出:

top-level in one.pyone.py is being imported into another moduletop-level in two.pyfunc() in one.pytwo.py is being run directly

可见,当two.py脚本里导入one模块时,也就是import one时,程序会执行one.py模块,且对one来说,name变量的值就是one(模块名)了

1 0