网站首页 > 基础教程 正文
在Python模块当中,通常会写上一行“if __name__==’__main__:”作为程序的入口,但似乎没有这么一行代码,程序也能正常运行。那么这句代码是多余的吗,为什么?
Python模块通常有两种运行方式,如下:
- 第一种:作为模块直接运行。
- 第二种:被导入( import )到其他的 Python 模块中。
if __name__==’__main__: 的作用就是控制这两种情况代码执行过程,即在if __name__==’__main__: 下的代码只有在第一种情况下才会被执行,而当该模块被导入(import ) 到其他模块时,if __name__==’__main__: 下的代码是不会被执行的。
简单讲,if __name__==’__main__: 让你写的模块既可以导入到其他模块中用,也可以直接使用。下面我们通过实例详细介绍说明。
作为模块直接运行
如下,直接执行p_testops.py模块 ,我们可以看到if __name__==’__main__: 语句之前和之后的代码都被执行。
被导入(import)到其他模块
如下,当执行 import testops 时,只输出了print testops.format_time() 的运行结果。即,if __name__==’__main__:之前的语句被执行,之后的没有被执行。
if __name__ == '__main__':运行原理
既然是个 if 判断语句,我们就来看看__name__ 。
__name__是标识模块的名字的一个系统变量,上面例子中提到的n_testops.py、p_testops.py就是两个模块,我们在文中开头提到模块运行分两种情况,如下。
作为模块直接运行
假如当前模块是主模块(直接运行),那么此模块名字就是__main__,通过if判断__name__==’__main__结果为真,这样就可以执行if __name__ == '__main__'后面的代码。示例代码如下:
如下,可以看到p_testops.py被直接运行时,__name__的值为__main__,那么__name__=="__main__"为真,因此执行了 print testops.str_time()。
导入(import)到其他模块
假如此模块是被导入(import)的,则此模块名字为文件名字(不含后缀),通过if判断__name__=="__main__"为假,这样就会跳过if __name__ == '__main__': 后面的代码。示例代码如下:
如下,我们可以看到 p_testops.py模块被导入到n_testops.py模块中,__name__的值为p_testops,__name__=="__main__"为假,跳过if __name__ == '__main__':后面的代码。
猜你喜欢
- 2024-11-02 Python教程:条件if控制语 python if条件语句如何进行多条件判断
- 2024-11-02 一文看懂:Python中的if __name__=="__main__"的含义
- 2024-11-02 python编程_秒懂if __name__==__main__
- 2024-11-02 python关键字专题if python关键字吗
- 2024-11-02 Python if __name__ 的作用介绍 python里if __name__="__main__"
- 2024-11-02 为什么python里要 if __name__ == ‘__main__’
- 2024-11-02 Python写每天进步1%的力量 python 每天增长
- 2024-11-02 零基础学python第五天之if python代码if
- 2024-11-02 Python的if分支结构,超简单 python中if语句的书写结构
- 2024-11-02 python笔记之if条件判断 python中if判断
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)