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
- python:if __name__ == '__main__'到底有什么用?
- python中的if __name__ == '__main__'有什么用
- if __name__ == '__main__'到底干了什么?(关键词:Python、__name__、__main__)
- python if __name__ = '__main__'
- python中的__name__ == "__main__" 有什么作用?
- 【Python】if __name__ == '__main__'
- 【Python】if __name__ == '__main__'
- python中if __name__ == '__main__':
- Python: if __name__ == "__main__"
- Python 之 if __name__ == '__main__':
- python if __name__ == '__main__' 详解
- 【Python】if __name__ == "__main__":
- python中if __name__ == '__main__'
- Python 之 if __name__ == '__main__'
- python基础:if __name__ == '__main__'
- 【Python基础】if __name__ == '__main__'
- 【python】if __name__ == "__main__"
- python中if __name__ == '__main__'
- 大型网站系统架构实践(二)分布式模块之间的通信
- 直接插入排序
- colorPrimary、colorPrimaryDark、colorAccent详解
- 时频域能量相等(parseval定理)
- spring工厂
- python:if __name__ == '__main__'到底有什么用?
- 用pdflatex编译遇到K font txsy could not be created问题
- c++中size_t和size_type之间的关系
- Vue.js使用vue-router构建单页应用
- Java二维数组初始化
- exports 和 module.exports 的区别
- pat-a1032. Sharing (25)
- 3.4、#pragma预处理分析
- POJ1190_生日蛋糕_深搜