博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 中的 if __name__=='__main__' 作用
阅读量:4055 次
发布时间:2019-05-25

本文共 1440 字,大约阅读时间需要 4 分钟。

先放代码:

one.py

#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")
three.py

#file three.pydef func1():    print("func1() in three.py")print("top-level in three.py")if __name__ == "__main__":    print("three.py is being run directly")else:    print("three.py is being imported into another module")
two.py

#file two.pyimport one       import treeprint("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.pytop-level in one.pyone.py is being run directly
➜  ~ python three.pytop-level in three.pythree.py is being run directly
➜  ~ python two.pytop-level in one.pyone.py is being imported into another moduletop-level in three.pythree.py is being imported into another moduletop-level in two.pyfunc() in one.pytwo.py is being run directly
有没有在two.py的运行结果中发现什么呢?

在python编译器读取源文件的时候会执行它找到的所有代码,而在执行之前会根据当前运行的模块是否为主程序而定义变量__name__的值为__main__还是模块名。因此,该判断语句为真的时候,说明当前运行的脚本为主程序,而非主程序所引用的一个模块。这在当你想要运行一些只有在将模块当做程序运行时而非当做模块引用时才执行的命令,只要将它们放到if __name__ == "__main__:"判断语句之后就可以了。

简而言之:在two.py中程序通过“import one”和“import three”,执行了one.py和three.py 的所有代码,但由于此时one,three只是主程序引入的一个模块,所以if __name__ == "__main__:"不成立,执行one.py,three.py 中的else语句,之后在返回主程序two.py。

若存在错误,请指出。谢谢

转载地址:http://twhci.baihongyu.com/

你可能感兴趣的文章
【数据结构基础笔记】第二章线性表之单链表
查看>>
【积跬步以至千里】Excel行列互换
查看>>
【YOLO学习笔记】之YOLO初体验
查看>>
【YOLO学习笔记】之YOLO配置文件详解
查看>>
【YOLO学习笔记】之YOLO v1 论文笔记1(超详细:翻译+理解)
查看>>
【YOLO学习笔记】之YOLO v1 论文笔记2(超详细:翻译+理解)
查看>>
【YOLO学习笔记——数据集】之一YOLO数据集制作1(含LabelImg工具讲解)
查看>>
【积跬步以至千里】pdf转word后数字和英文格式别扭,无法修改
查看>>
【YOLO学习笔记——数据集】之一YOLO数据集制作2
查看>>
【深度学习小常识】CPU(中央处理器)和GPU(图像处理器)的区别
查看>>
【人工智能小常识】一篇文章搞懂人工智能、机器学习和深度学习
查看>>
【积跬步以至千里】如何查看浏览器保存的密码
查看>>
【opencv拓展】摄像头基本操作
查看>>
【数据结构周周练】001顺序表与链表(含上海大学832计算机组成原理与数据结构原题)
查看>>
C++获取数组长度(自写函数实现)
查看>>
C++报错:写入位置 0xCCCCCCCC 时发生访问冲突。
查看>>
C++报错:引发了未经处理的异常:写入访问权限冲突, p 是 0xCCCCCCCC
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>