if __name__ == __main___python编程_秒懂if __name__==__main__

我们在编写python程序或看别人python代码的时候,经常会看到这句“if__name__==__main__”,它到底有什么作用,怎么用,什么时候用?勇哥就通过这篇文章来帮助大家搞懂这些疑问。

1、首先我们要明白一点,python程序不同于C和C++语言,不需要main()函数作为主程序入口。python中一个模块中的 程序是从上往下执行的,一个python源码文件就是一个模块,如下图所示,cc.py就是一个模块。

4c61a0ab027c7e38aa7e9d4839b569f7.png

2、python中使用的变量分为预定义变量和自定义变量,预定义变量是python本身内部提前定义好的,多用下划线开头以下划线结束来表示。比如__name__,__file__就是一个预定义变量。其实__name__是python预定义的全局变量,在模块内部用来表示模块名称的,如果模块是被导入的,则__name__的值就是模块的名称,如果模块被直接执行,则__name__的值则为__main__ 如下图所示。

5c1e8a89d7ad63b25363322f43d34652.png

我们平时编写的模块要么直接自己调用自己来运行,要么被别人调用来运行。一般来说大部分模块都是被导入,被别人调用来执行,也就是说被别人集成,充当别人的“配件“。

3、综合上述,我们知道所有的模块都是有能力来执行代码的,也就是说, 那些没有缩进的代码行在模块被导入时就会被执行, 不管是不是真的需要执行。如果你不希望某些代码被导入时执行,可以使用if__name__==”__main__”:加以保护。

假如 cc模块中的代码如下图所示,我在创建一个mytest模块,我的意图是在mytest模块中通过导入cc模块中的add函数来使用。

383f35525dd82127f5b8b5fbdf4da9cc.png

当我在mytest中只写了一条导入语句,然后运行mytest模块,发现cc模块中的第4行语句自动执行了,这个显然不是我想要的,如下图所示。

1beffa9fb7c0603838a9cc93860dac83.png

如果解决这个问题那?我们可以把导入时不希望运行的语句或测试cc模块本身的语句放到if __name__==”__main__”所属的语句里就可以了。我把cc模块中的代码改为如下图所示,这样就解决上述问题,即使你调用add函数也不存在问题了。

2d9b5a0044007b1271da8b9a23148f3b.png

为什么这样就不会自动执行那,是因为当一个模块被别的模块导入时,它的名字就是它真实的名字比如cc,不在是__main__。所以cc模块中的if __name==”__main__”下面的语句就不会自动执行。通常我们会把测试本模块的代码放到它的下边,这样做的好处是既可以满足测试本模块代码的功能,也可以在被别人导入时,测试代码不会被自动执行。

我是码农阿勇,喜欢的话,关注我们,你的认可是我们最大的努力方向,感谢小伙伴们一如既往的支持我们,期待留下宝贵建议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值