python项目中为什么经常看见“ if __name__ == ‘__main__’:”?
前言
尽管大家在编写python会允许你像shell脚本一样,把大量代码堆积在一起,但是,有很多python入门的书籍,都会建议封装一个函数去写(面向对象也可以写),然后在最后统一调用,例如这样 :
def main(): #具体代码 if __name__ == '__main__': main()
很多文章都会说这是由于代码样式等原因,但实际上,不这样写,有时会直接导致错误。
例如,打开python的一个字节的class变量部分,可以在这里看到在线版本,然后在中间复制示例代码,运行,就可以看到预期的正确结果。
但是现在将代码中的所有“swaroop”替换为“xxx1”,将所有“kalam”替换为“yyy1”,然后再次运行,在程序结束时,您将得到这样一个奇怪的错误(python 2.6.5实验):
异常属性错误:>忽略中的“nonetype”对象没有属性“population”
也就是说,如果我们改变变量名,程序就会出错…
原因是,当Python最终销毁所有类和对象时,它不处理这些对象之间的依赖关系,而是根据变量的名称决定某种顺序操作。因此,Person类本身在YYY2之前就被销毁了,所以当您解构YYY2时,您将执行它的Del_()方法,并发现父类已经不存在了。~~
这在Python解析器中应该是一个bug,但是如果您将本例中类人员之外的所有代码写入一个main()函数并通过上面的方法调用它,就不会发生这种情况。
所以,你最好不要太注意几行代码,养成这个好习惯。
小编推荐一个学python的学习qun 740322234
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分
享!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C语言中的“六大陷阱”,你可能已经知道了两个
前戏要理解一个C 程序,仅仅理解组成该程序的符号是不够的,我们还需要理解这些符号是如何组成声明、表达式、语句和程序的。今天我们就来讨论一下不一样的语法结构。 1. 正确理解函数声明你是否见过这样的代码“((void()())0)();”,你能知道这是上面意思吗? 看不懂不用担心,下面我们来分析一下:任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。声明符从表面上看鱼表发挥有些类似,对他就只应该返回一个声明给定的结果。(void ()()0)是将常数0 转型为“指向返回值为void 的函数的指针”类型。而((void(*)())0)();就可以看成是一个函数调用,末尾的分号使得表达式成为一个语句。当然我们也可以使用typedef来世表达式更加清晰: typedef void (*funcptr)(); (*(funcptr)0)(); 2. 运算符的优先级问题在 C语言中,运算符优先级有15个之多,如果不知道运算符的优先级我们在处理问题,分析代码时,就非常被动,那么我们可以对运算符进行简单的分组,了解各组运算符之间的相对优先级,那么记起来就相对简单了...
- 下一篇
代码缺少一块?在vim里面使用tab进行代码补全
前言Pydiction 允许你在 Vim 中实现 TAB 代码补全, 可以补全的内容包括:标准的、自定义的,以及第三方模块和包。外加关键字、BIFs,和字符串。 Pydiction 由 3 个主要文件构成: python_pydiction.vim -- 该文件为 Vim 的 plugin 文件,实现 Python 文件的 TAB 补全功能。 complete-dict -- 该文件为 Vim 的 dictionary 文件,其中包含 Python 关键字和模块结构等信息。是 plugin 进行补全时所查找的参考文件。 pydiction.py -- (可选)该文件是 Python script 文件,用于生成 dictionary 文件。可以通过执行该脚本添加更多的可 TAB 补全模块。 用法 在 Vim 中输入部分 Python 关键字、模块名、属性或方法名,然后按 Tab 键以弹出补全信息。 例如, 输入 os.p<Tab> 会弹出 os.pardir os.path os.pathconf( os.pathconf_names os.pathsep os.pipe(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境