Python基础— _name_ == ‘_main_’

今年国庆节过的比较悠闲,中间只有一天来了一个短途去了苏州,其余大部分时间都是在家休息,这是我第二次去苏州,印象中对苏州园林的印象还一直来自于中学课本,园林应该是一个大的公园,有竹林,小桥,流水,假山,凉亭。算得上是一个自然景观吧。这次去亲身体验发现我的假设大部分还是对的,只是它不是一座公园,而是有钱人的私家宅院。读万卷书,行万里路,可见没有实践的永远不能保证是完全正确的,想象和现实总是有着各种差距。

看了Pence的演讲,即便我无意于或者不忍于贬低自己的祖国,但却又无法说服自己这些个烂疮实实在在的存在于这个国度。无奈,无力,失语。但愿正如Pence引用的那句话,Heaven not only see the future, but also give us the hope!


回过头来看看Python为什么需要__name__ == ‘_main_’? 先看看两段代码:

# executor.py
def entry():
    print ("implement something here...")

print ("do something here...")
print __name__

if __name__ == '__main__':
    pass

# caller.py
import executor

if __name__ == '__main__':
    pass

如果直接运行第一段程序,我们将得到下面的结果:

>python executor.py
do something here...
__main__

运行第二段程序输出下面的结果:

>python caller.py
do something here...
executor

这里我们得出两条结论:
1)Python里可以直接在模块里写不属于任何function的语句,例如第一段程序里的两个print语句,这个有点类似shell,而不同于java或者c语言,这些语句无论在本模块被执行或者被import到其它python文件中去,都会被自动执行,这有时不是我们希望看到的。而实际上这些语句常常被理解为Python的main函数。我们可以忽略所谓的main函数,因为这对于我们的理解无益,但是我们
可以将其改写为下面的形式:

# executor.py
def entry():
    print ("implement something here...")

def main():
    print ("do something here...")
    print __name__

if __name__ == '__main__':
    main()

这样以第一种方式直接执行此文件,得到的将是相同的结果。

2)_name_ 被解释为不同的名字,第一种方式被解释为__main__, 而第二种被解释为executor,所以当我们将程序改写为上面的形式的时候,main中的定义的语句这次将得不到执行。这时候将没有任何输出。但同时可以通过显示的调用*executor.main()*来让这两行语句得到执行。

所以,python程序中if _name_ == '_main_'这行语句的目的就是希望有些语句能有条件的得到执行,或者说只有本模块直接运行时才会被调用。这样保证了此模块被其它模块引入时这些语句不会被调用,即便它时所谓的main函数。

那什么时候需要用这样的语句呢?一个典型的例子比如在做模块的单元测试的时候。


个人博客:http://www.jungler.cn/


[1] https://interactivepython.org/runestone/static/CS152f17/Functions/mainfunction.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值