python编程中的if __name__ == "__main__":

本文介绍如何利用Python的__name__属性使模块既能独立运行又能被其他模块导入而不执行特定代码。通过实例展示了如何正确设置if __name__ == '__main__':,以便于调试和模块复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习软件编程最好的方式是 : 看官方文档,不断实践官方文档所说的!

 


 

有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。下面举例说明:

先写一个模块:

1

2

3

4

5

#module.py

def main():

  print "we are in %s"%__name__

if __name__ == '__main__':

  main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():

但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

1

2

3

#anothermodle.py

from module import main

main()

其执行的结果是:we are in module

但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

延伸阅读:

每个python模块(python文件)都包含内置的变量__name__,模块的 __name__ 在通过标准输入、脚本文件或是交互式命令读入的时候会等于 "__main__",当被引入到其他模块被执行的时候,__name__等于该文件包名+文件名(被引入的)。

通俗的理解__name__ == "__main__":假如你叫小明.py,在朋友眼中,你是小明(__name__ == "小明");在你自己眼中,你是你自己(__name__ == "__main__")

不同于c/c++/java有统一的程序入口函数main(),而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。

 

参考:http://www.dengfeilong.com/post/60.html

        https://blog.youkuaiyun.com/jjwen/article/details/53084882

        https://www.cnblogs.com/alan-babyblog/p/5147770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值