当前位置: 首页 > news >正文

【深度】Python程序员经常踩得那些坑(1)

前言

在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误。首先我要说明一下的是,这些都是来源于第一手的经验。我以讲授Python的知识为生。在过去的7年里,我已经给上千名学生讲授上百堂Python的课程,同时看着这些学生们犯同样的错。

事实上,这些错误实在是太普遍了以至于我敢保证你刚开始学的时候是一定会犯的。

“那么是什么呢?”你会问,“你也会在Python里犯那么多错么?”是的。Python可能是最简单、最灵活的语言之一,但它终究还是一门编程语言。它仍然有语法,数据类型,以及巫师蒂姆居住的黑暗角落。

(典故出自《蒙蒂派森与圣杯》中的魔法师蒂姆,他主角们指点在洞穴的墙壁上记录的圣杯位置,作者在此处的意思是Python语言里容易犯错的地方。另,Python语言得名于作者Guido van Rossum特别喜欢的《蒙蒂派森飞行马戏团(Monty Python’s Flying Circus)》——译者注)

好事情是多亏了Python那干净的设计,一旦你学会了Python,你就能自动的避开很多陷阱。Python在其各组件之间有着最小的互动,这能有效的减少bug。它也拥有十分简单的语法,这意味着在一开始你就有更小的概率犯错。当你实在是犯了错的时候,Python的即时错误检测和报告能帮你迅速的恢复。

但用Python编程也不是个自动完成的活儿,很多事还是要早做准备。那么废话不多说了,让我们直切正题。在接下来的三节里我们将这些错误分为语用、代码,以及编程三个大类。如果你想读到更多的Python的常见错误以及如何避免它们,那么在O’Reilly系列丛书的《Learning Python》里有详细的解读。

1

语用错误

让我们从基础开始,从那些刚学习编程的人钻研语法之前碰到的事情开始。如果你已经编过一些程了,那么以下这些可能看起来十分的简单;如果你曾经尝试过教新手们怎么编程,它们可能就不这么简单了。

在交互提示符中输入Python代码

在>>>交互提示符中你只能输入Python代码,而不是系统命令。时常有人在这个提示符下输入emacs,ls,或者edit之类的命令,这些可不是Python代码。在Python代码中确实有办法来调用系统命令(例如os.system和os.popen),但可不是像直接输入命令这么直接。如果你想要在交互提示符中启动一个Python文件,请用import file,而不是系统命令python file.py。

Print语句(仅仅)是在文件中需要

因为交互解释器会自动的讲表达式的结果输出,所以你不需要交互的键入完整的print语句。这是个很棒的功能,但是记住在代码文件里,通常你只有用print语句才能看得到输出。

小心Windows里的自动扩展名

如果你在Windows里使用记事本来编辑代码文件的话,当你保持的时候小心选择“所有文件”(All Files)这个类型,并且明确的给你的文件加一个.py的后缀。不然的话记事本会给你的文件加一个.txt的扩展名,使得在某些启动方法中没法跑这个程序。更糟糕的是,像Word或者是写字板一类的文字处理软件还会默认的加上一些格式字符,而这些字符Python语法是不认的。所以记得,在Windows下总是选“所有文件”(All Files),并保存为纯文本,或者使用更加“编程友好”的文本编辑工具,比如IDLE。在IDLE中,记得在保存时手动加上.py的扩展名。

在Windows下点击图标的问题

在Windows下,你能靠点击Python文件来启动一个Python程序,但这有时会有问题。首先,程序的输出窗口在程序结束的瞬间也就消失了,要让它不消失,你可以在文件最后加一条raw_input()的调用。另外,记住如果有错的话,输出窗口也就立即消失了。要看到你的错误信息的话,用别的方法来调用你的程序:比如从系统命令行启动,通过提示符下用import语句,或者IDLE菜单里的选项,等等。

Import只在第一次有效

你可以在交互提示符中通过import一个文件来运行它,但是这只会在一个会话中起一次作用;接下来的import仅仅是返回这个已经加载的模块。要想强制Python重新加载一个文件的代码,请调用函数reload(module)来达到这个目的。注意对reload请使用括号,而import不要使用括号。

空白行(仅仅)在交互提示符中有作用

在模块文件中空白行和注释统统会被忽略掉,但是在交互提示符中键入代码时,空白行表示一个复合语句的结束。换句话说,空白行告诉交互提示符你完成了一个复合语句;在你真正完成之前不要键入回车。事实上当你要开始一个新的语句时,你需要键入一个空行来结束当前的语句——交互提示符一次只运行一条语句。

    目前《Learning Python》中文版《Python学习手册》第五版正在京东和当当上架销售,本书根据Python专家Mark Lutz的著名培训课程编写而成,是易于掌握和自学的Python语言教程。

书中以目前主流的Python 3.X为主,同时兼顾Python 2.X的内容,全面、系统讲解Python语言核心知识,每个知识都会以知识点、思想、示例代码的方式详细展开,由浅入深,循序渐进。同时每章都配有章后习题、编程练习及详尽的解答,并且还配有大量注释、示例和图表,便于你学习新的技能和巩固加深自己的理解。无论你从事哪个领域,本书都为你提供了未来全部Python工作的必备知识。

扫描二维码,即刻下单购买图书

相关文章:

  • 【活动】《机·智:从数字化车间走向智能制造》读者沙龙
  • 【深度】Python程序员经常踩得那些坑(2)
  • 【今日新闻】11.20
  • 【活动】BDTC 2018 中国大数据技术大会首曝日程及议题
  • 【今日新闻】11.22
  • 【深度】Python程序员经常踩得那些坑(3)
  • 【云原生分布式存储】成书心路历程
  • 《机•智》读者沙龙在京成功举办
  • 一文读懂人工智能的前世今生(建议收藏)
  • 跟着阿里大牛捞干货:2019这5本书带你玩转大数据
  • 人工智能入门书单
  • 谷歌最新开源前端框架了解一下?前端小白都能看懂的8本书
  • Office办公软件各种神操作,看到第1个就傻眼了,建议收藏
  • 【书单】Python图书推荐
  • AI删库,程序员背锅?
  • Android交互
  • echarts的各种常用效果展示
  • in typeof instanceof ===这些运算符有什么作用
  • Java多线程(4):使用线程池执行定时任务
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux中的硬链接与软链接
  • markdown编辑器简评
  • MQ框架的比较
  • spring security oauth2 password授权模式
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于HAProxy的高性能缓存服务器nuster
  • 记一次和乔布斯合作最难忘的经历
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 面试遇到的一些题
  • 如何实现 font-size 的响应式
  • 如何用Ubuntu和Xen来设置Kubernetes?
  •  一套莫尔斯电报听写、翻译系统
  • 鱼骨图 - 如何绘制?
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 正则表达式小结
  • 追踪解析 FutureTask 源码
  • MyCAT水平分库
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)STL算法之搜索(二) 二分查找
  • (MATLAB)第五章-矩阵运算
  • (备忘)Java Map 遍历
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Linux——Linux常用指令
  • (一)插入排序
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Scala的“=”符号简介
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **CI中自动类加载的用法总结
  • .NET MVC之AOP