python __name__=__main___为什么python里要 if __name__ == ‘__main__’

原标题:为什么python里要 if __name__ == ‘__main__’

尽管python允许你像shell脚本一样,把大段的代码堆积着写,但是,很多python入门的书,都会建议你把代码写成一个函数,然后在最后面统一调用,例如这样:

def main:

#具体代码

if __name__ == '__main__':

main

很多文章都会说这个是由于代码风格之类的原因,但是其实,不这样写,有时候也是会直接导致出错的。

举个例子,打开《A Byte of Python》的类变量那节,可以这里看在线版本,然后把中间的那示例代码复制下来,运行,可以看到,确实能得到预期正确的结果。

但是,现在把那代码里的所有“swaroop”换成“xxx1”,再把所有“kalam”换成“yyy1”,再运行,就会在程序运行的最后时刻,得到这么一个奇怪的错误(Python 2.6.5下实验):

Exception AttributeError: "'NoneType' object has no attribute 'population'" in > ignored

也就是说,换了个变量名,程序就出错了。。。

究其原因,应该是python在最后析构所有类和对象的时候,并没有处理这些对象之间的依赖关系,而是根据变量名来决定某种顺序操作了。从而导致Person类本身,先于yyy2被干掉了,所以在解构yyy2的时候,执行它的__del__方法,却发现父类都已经没有了~~

这应该确实算是python解析器的bug,但是,如果那把这个例子里的所有class Person以外的代码,写到一个main函数里,再通过上述方法调用的话,就不会发生这种错误了。

所以,大家最好还是别太在意多几行代码,养成这个好习惯吧。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值