现在有数百种编程语言可供使用,从成熟的C和C++到Ruby、C#和Lua等新秀,再到Java这样的企业级重器。要选择一门编程语言来学习确实很难。虽然没有一种语言能适合任何场景,但我觉得,对于大量的编程问题来说,Python都算得上是个好选择。如果正在学习编程,Python也是一个不错的选择。目前全球有数十万名程序员都在使用Python,并且用户数每年都在增长。
Python能够持续吸引新用户,是有很多理由的。Python是一款真正的跨平台编程语言,从Windows、Linux/UNIX到Macintosh平台,从超级计算机到手机,它都能很好地运行。Python可以用于开发小型应用程序和快速原型系统,但也能扩展到足以开发大型程序。Python自带了功能强大且易于使用的图形用户界面(GUI)工具包、Web编程库等。而且更重要的是,Python完全免费。
十大优秀编程资源
1 使用Python在线文档
使用Python的一个主要部分是了解这种语言中有哪些内容可用以及如何扩展它来做其他任务。在线Python文档(写作本书时的版本为3.6.x,当你读到这里时文档版本很可能已经更新了)提供了更多有关Python的参考资料,包括如下主题:
- 当前Python版本添加的新特征;
- 完整教程;
- 完整库参考;
- 完整语言参考;
- 如何安装和配置Python;
- 如何使用Python执行特定任务;
- 从其他源安装Python模块(作为Python扩展的手段);
- 发布自己创建的Python模块,供其他人使用;
- 如何使用C/C++扩展Python,以及嵌入你创建的新特征;
- 面向C/C++开发者(想使用Python扩展他们的应用程序)的完整参考;
- FAQ页面。
上面所有信息都是以易于访问和使用的形式提供的。查找信息时,除了使用常见的内容目录之外,你还可以使用索引进行查找。例如,如果你只对特定的模块、类或方法感兴趣,那么你可以使用全局模块索引(Global Module Index)查找。
此外,你也可以把自己使用Python时遇到的问题在官网中进行提交。虽然解决与产品相关的问题很重要,但是和其他语言一样,Python中也会存在bug。找出和修正这些bug会让Python变得更好。
在线文档使用起来很灵活。在文档页面的左上角有两个下拉列表框:第一个是语言下拉列表框,从中你可以选择自己喜欢的语言(写作本书时,只有英语、法语和日语3种语言可供选择);第二个是Python版本选择下拉列表框,里面提供了一些Python早期版本,包括Python 2.7。
2 使用LearnPython.org教程
网上Python学习教程有很多,大都做得很不错,但相比于LearnPython网站上的教程,它们都有一个不足,那就是缺少交互性。在LearnPython网站上学习Python时,你不只是在阅读有关Python的知识,还可以使用网站提供的交互环境亲自动手试一试。
到这里,本书中的简单教程你可能都学过了。但LearnPython网站上的一些高级教程你可能还没学过。这些教程主要讲解以下主题。
- 生成器:返回迭代器的特殊函数。
- 列表生成式:一种基于现有列表生成新列表的方法。
- 可变函数参数:对第15章“使用带有可变参数列表的方法”内容的补充。
- 正则表达式:用于匹配字符模式的通配符设置,比如电话号码。
- 异常处理:对第10章内容的扩展。
- 集合:这是一种特殊的列表,里面不包含重复元素。
- 序列化:讲解如何使用JSON这种数据存储技术。
- 偏函数:用于创建派生于较复杂函数的简单函数的专门化版本。比如,你有一个带有两个参数的multiply()函数,那么名为double()的偏函数可能只需要一个参数,这个参数总是要乘以2。
- 代码审查:提供检查类、函数、关键字的能力,用于判断用途和功能。
- 装饰器:一种对可调用对象进行简单修改的方法。
3 使用Python做Web编程
本书探讨了基本编程的来龙去脉,其中涉及的都是很简单的桌面应用程序。有许多开发人员专门使用Python创建各种各样的在线应用程序。Python Web编程网站可以帮助你从桌面程序开发转向在线应用程序开发。它并非只讲解一种在线应用程序,而是涵盖了几乎所有应用程序(免费提供整本书)。教程分为如下3个主要部分(和许多次要部分)。
- 服务器
- 开发应用程序服务器端框架
- 创建CGI脚本
- 提供服务器应用程序
- 开发内容管理系统(CMS)
- 通过Web服务方案设计数据访问方法
- 客户端
- 使用浏览器和基于浏览器的技术
- 创建基于浏览器的客户端
- 通过各种技术(包括Web服务)访问数据
- 相关
- 为基于Python的在线计算创建通用方案
- 使用数据库管理系统(DBMS)
- 设计应用程序模板
- 构建内部网解决方案
4 获取更多库
或许你会认为Pythonware这个站点平淡无奇,但当你进入这个网站后,你就会被它深深吸引。这个网站提供了大量第三方库,借助这些库,你可以使用Python做更多的工作。
网站里面有大量链接,为我们提供了很多有用的资源。其中,通过“Downloads”这个链接你可以访问如下库。
- aggdraw:这个库帮助你绘制平滑的线条。
- celementtree:这个库是elementtree库的扩展库,可以让你更快、更高效地使用XML数据。
- console:这是一个窗口界面,帮助我们创建出更好的控制台程序。
- effbot:包含了许多有用的附加组件和实用程序,包括ENews RSS新闻阅读器。
- elementsoap:这个库可以帮助我们创建到Web服务提供者的SOAP(简单对象访问协议)连接。
- elementtidy:这是对elementtree库的扩展,可以帮助我们创建出更好看、功能更强大的XML树。
- elementtree:这个库可以帮助我们更高效地使用XML数据。
- exemaker:这是一个从Python脚本创建可执行程序的实用程序,借助它,你可以在机器上像运行其他应用程序一样运行脚本。
- ftpparse:这个库用来使用FTP站点。
- grabscreen:这个库用来截屏。
- imaging:向Python图像处理库(PIL)提供源代码分发,该库允许你向Python解释器添加图像处理功能。通过它,你可以定制PIL来满足自己特定的需求。
- pil:PIL的二进制安装程序,它可以让PIL库更容易地安装到你的系统中。(还有其他基于PIL的库,比如pilfont库,这个库用于向基于PIL的应用程序添加字体增强功能)。
- pythondoc:这个实用程序用来从Python代码中的注释创建文档,其工作原理与JavaDoc类似。
- squeeze:这个实用程序用于将包含在多个文件中的Python程序转换为单文件或双文件的发行版,并能够在Python解释器中正常执行。
- tkinter3000:这个库是Python的标准GUI部件库,包含许多子产品。这些部件本质上是一些代码,用于创建GUI应用程序中的控件,如按钮。tkinter3000库有许多附加组件,例如wckgraph,它帮助你向应用程序添加图形支持。
5 使用IDE快速创建应用程序
交互式开发环境(IDE)帮助你使用特定语言创建应用程序。Python本身自带了一个集成开发环境——IDLE,适合用来做代码实验,但用过一段时间之后你就会发现它有不少局限性,例如,IDLE并不提供许多开发人员喜欢的高级调试功能。另外,当你要创建图形应用程序时,IDLE很难帮你做到这一点。
由于IDLE本身存在诸多的局限性,所以本书才决定采用Jupyter Notebook来代替IDLE(本书第一版采用的是IDLE)。不过,在某些情况下,你还是会发现Jupyter Notebook并不能满足你的需求。如果你问50个开发人员哪些工具(尤其是问IDE时)是最好用的万金油,他们的回答大都不一样,几乎很难达成共识。每个开发人员都有自己喜欢的工具,也都不太愿意去尝试其他工具。通常,开发人员会花很多时间来学习某款IDE工具,并通过扩展它以满足自己特定的需求(当然,这要求IDE本身支持扩展)。
在选定某个IDE之前要多尝试几种不同的IDE,这点很重要,因为一旦你选定了某种IDE,以后就很难再做出改变了。(一旦你选中某个IDE之后,就不想再换成其他IDE了,其中最常见的原因是项目类型不兼容,每次换IDE时,你都必须重新创建项目,此外还有许多其他原因,你可以在网上找到)。PythonEditors维基主页列出了许多IDE,你可以尝试一下它们。并且表格中为你提供了每个IDE的详细信息,你可以根据这些信息和自己的需求立即排除某些IDE。
6 更容易地检查语法
IDLE提供了某种程度的语法高亮显示功能,这有助于我们查找代码中的错误。比如,如果你输入错误的关键字,IDLE就不会将其颜色更改为系统中定义好的关键字颜色。这样,你就可以立即知道错误出在哪里,以及如何修改它,而不必等到应用程序运行后才发现错误(有时需要经过几个小时的调试才能找到错误)。
Jupyter Notebook也提供了语法高亮显示功能,还有一些标准IDE所不具备的高级错误检查功能。不过,对于某些开发人员来说,它本身可能也有一些不足,比如你必须实际运行单元格才能看到错误信息。有些开发人员更喜欢交互式语法检查方式,在这种检查方式中,IDE会立即标记出代码中的错误,甚至在开发人员离开错误代码行之前,其中错误就已经被标识出来了。
python.vim实用程序提供了增强型的语法突出显示功能,使得在Python脚本中查找错误更加容易。这个实用程序以脚本形式运行,这使得它可以在任何平台上都能快速、高效地使用。此外,你还可以根据需要调整其源代码以满足特定的需求。
7 使用XML
现在大多数应用程序都使用可扩展标记语言(XML)来进行各种类型的数据存储工作。你的系统中可能就有很多XML文件,但你可能认不出它们,因为XML数据存在于许多文件扩展名之下。比如,许多用来保存应用程序设置的.config文件使用的就是XML。简而言之,现在的问题不是编写Python应用程序的过程中你会不会遇到XML,而是你什么时候会遇到它。
与其他存储数据的方法相比,XML有许多优点,比如,XML是平台独立的。你可以在任何系统上使用XML,只要系统认识这种文件格式,同一个文件在不同系统上就都是可读的。由于XML是平台独立的,所以你可以在许多其他技术(比如Web服务)中看到XML的身影。此外,XML学起来相对容易,而且还是文本的,所以你可以大量使用它,而不用担心会引起太多问题。
学习XML本身是很重要的,你可以在类似W3Schools的教学网站上查找相关教程来学习。有些开发人员在没有掌握XML文件相关知识的情形下就急于着手做各种工作,后来他们发现有些Python资料看不懂,因为这些资料往往会假设读者知道如何编写基本的XML文件。W3Schools这个网站很不错,它把整个学习过程分成若干章节,这样每次你就可以使用一些XML,如下:
- XML基础教程;
- 验证你的XML文件;
- XML和JavaScript(JavaScript看上去不重要,但在许多在线应用场景中,JavaScript应用广泛)配合使用;
- 了解与XML相关的技术;
- 使用XML高级技术;
- 使用XML示例使XML更易用。
利用W3Schools学习计算机技术
在线学习计算机技术最常用的网站是W3Schools,你可以在其官网中找到要学习的内容。在这个网站中,你可以找到创建各种应用程序所需要的Web技术。所涉及的主题包括:
- HTML;
- CSS;
- JavaScript;
- SQL;
- JQuery;
- PHP;
- XML;
- ASP.NET。
但是,你应该知道,这对Python开发人员来说只是一个起点。先利用W3Schools中的学习资料来切实掌握底层技术,然后通过Python专门资料来提升你的技能。大多数Python开发人员都需要综合各种学习资料来提升自己的技能,从而在编写应用程序的过程中展现出与众不同的一面。
掌握了有关XML的基础知识之后,你需要学习如何在Python中使用XML。网上有各种技术专题,你可以在各个网站中找到关于使用Python处理XML的教程。通过学习这些教程,你可以快速了解有关XML的知识,并让你能够快速创建出使用XML的Python应用程序。
8 克服常见的Python新手错误
毫无疑问,每个人编写代码时都会犯错误,即便那些有着30多年编程经验的老程序员(他们大概从幼儿园就开始学习编程了)也不例外。每个人都会犯错,但没人喜欢犯错,有些人犯了错还不愿意承认,其实没这必要,犯了错时,不要太沮丧,只要把错误改正过来,你的生活就可以继续下去。
当然,犯错误和犯可以避免的常见错误是有区别的。不错,即使是专业人士有时也会犯一些本可以避免的常见错误,但这种可能性要小很多,因为他们过去已经经历过这种错误,并训练自己去避免它。你可以通过避免新手错误来获得竞争优势。
对于刚开始学习Python的人来说,还有许多其他资料可用,但是相比之下,上面这些资料内容简洁且容易理解。你可以在较短的时间内读完它们,做一些笔记以备用,并避免那些让每个人都会记住的尴尬错误。
9 了解Unicode
尽管本书试图回避Unicode这个棘手的话题,但是当你开始编写正规应用程序时,你最终还是会碰到它。不过,遗憾的是,Unicode是由一个委员会来决定的,所以最终就有了不止一个定义和标准。简而言之,Unicode没有一个统一的定义。
当你开始使用更高级的Python应用程序时,你会遇到大量的Unicode标准,特别是当你的程序要在多种语言(每种语言似乎都有自己的Unicode)下运行时。请记住,我们需要了解Unicode是什么,下面提供给你一些学习主题:
- Unicode和字符集;
- Python中的Unicode更新;
- Python编码和Unicode;
- Unicode概述,参见Unicode官网。
10 加快Python程序的运行速度
就应用程序来说,没有什么比性能差更能吓跑用户的了。当应用程序性能很差时,用户根本就不愿意使用它。事实上,糟糕的性能是造成应用程序在企业环境中失败的一个重要原因。即便有组织愿意花费大量金钱去创建一个万能的应用程序,但是如果这个程序的运行速度太慢,或者有严重的性能问题,也不会有人愿意使用它。
事实上,性能是可靠性、安全性和速度的综合,这3个因素构成了“性能三角”。你可以在作者的博客中读到有关性能三角形的内容。许多开发人员只关注性能的速度部分,但最终没能实现他们的目标。重要的是查看应用程序使用资源的各个方面,并确保你使用了最好的编码技术。
十大提升你Python技能的工具
与其他大多数编程语言一样,Python拥有强大的第三方支持,它们提供了各种各样的工具。这些工具在创建应用程序的过程中能够大大增强Python的功能。调试器是一种工具,因为它是一种实用程序,而库不是,库是用来创建更好的应用程序的(第21章我们会讲一些常用库)。
即使我们把工具和非工具(比如库)区分开,也不能让工具的数量明显减少。Python有大量常规工具和特殊工具的支持,这些工具被分成以下13类:
- 自动化重构工具;
- Bug跟踪工具;
- 配置和构建工具;
- 部署工具;
- 文档工具;
- 集成开发环境;
- Python调试器;
- Python编辑器;
- Python Shell;
- Skeleton Builder工具;
- 测试软件;
- 有用模块;
- 版本控制。
值得注意的是,Python DevelopmentTools页面上的列表是不完整的。除此之外,你还可以在其他一些网页中看到大量的Python工具。
其实,只使用一个章节是不可能介绍完所有Python工具的,本章只挑选了几个需要特别关注的工具进行讲解。如果你对本章内容感兴趣,你可以自己去网上查找一些其他工具学习一番。你可能会发现,有些自己想创建的工具其实早就有了,而且不止一种。
1 使用Roundup Issue Tracker跟踪Bug
现在有很多bug跟踪站点可供我们使用,比如:Github、Google Code、BitBucket、Launchpad。不过,这些公共站点用起来通常都没有你自己定制的本地化Bug跟踪软件那样方便。你可以在本地机器上选用多种跟踪系统,但是Roundup Issue跟踪器是其中更好的一个。Roundup可以运行在所有支持Python的平台下,提供了如下基本功能:
- Bug跟踪;
- 管理TODO列表。
如果你愿意在安装上多下点功夫,你就可以获得更多的功能,这些额外功能体现的正是Roundup和其他产品不同的地方。但是,要获取这些功能,你可能需要安装其他产品,比如数据库管理系统(DBMS)。Roundup的产品说明中指出了你要安装什么以及它和哪些第三方产品是兼容的。安装完成后,你会获得如下这些功能。
- 客户支持,包含如下:
- 电话应答向导;
- 网络链接;
- 系统和开发问题跟踪工具。
- 互联网工程任务组(Internet Engineering Task Force,IETF)的问题管理。
- 销售趋势跟踪。
- 会议论文投稿。
- 双盲评审管理。
- 博客(目前还很简陋,以后会变得很强大)。
2 使用VirtualEnv创建虚拟环境
创建虚拟环境的理由很多,但主要原因还是为了创造一个安全、已知的测试环境。每次都使用相同的测试环境,这样可以保证应用程序拥有稳定的测试环境,直到你在类似产品的环境中完成足够的测试。VirtualEnv为我们提供了创建虚拟Python环境的方法,你可以使用它进行早期测试,或者诊断由环境原因引发的问题。请务必记住,你最少需要做3个标准级别的测试。
- Bug:检查程序中的错误。
- 性能:验证程序是否满足运行速度、可靠性、安全性方面的要求。
- 可用性:验证程序是否符合用户需求,是否能够按照用户期望的方式响应用户输入。
根据大多数Python应用程序的使用方式(相关内容参阅第19章),Python应用程序在实际工作环境中通常不需要运行在虚拟环境下。大多数Python应用程序都需要访问外部环境,但虚拟环境会阻止这种外部访问行为。
永远不要在生产服务器上测试程序
一些开发人员常犯的一个错误是在生产服务器上测试尚未发布的程序,这使得用户可以很容易地访问到它。永远不要在生产服务器上测试你的程序,原因有很多,其中最重要的一个是这样做会导致数据丢失。如果允许用户访问尚未正式发布的程序,而这个程序又包含可能会损坏数据库或其他数据源的Bug,这样就有可能造成数据的永久丢失或损坏。 你还要注意,你只有一次赢得别人好感的机会。许多软件项目的失败是因为用户最终抛弃了它。即便应用程序是完整的,但是没有人会使用它,因为用户认为应用程序在某些方面存在缺陷。用户心中只有一个目标,那就是尽快完成工作,然后回家。当用户发现某个程序在浪费他们的时间时,他们就不会再使用它了。 此外,未发布的应用程序有可能存在安全漏洞,心怀恶意的人可能利用这些漏洞非法访问你的网络。如果你的门是开着的,任何人都能进来,那不管你的安全软件有多棒都没什么用。当他们进来之后,你再想摆脱他们几乎是不可能的,即使你真的摆脱了他们,但这时对数据的损害已经发生了。从安全漏洞恢复是很难的,有时甚至是不可能的。简而言之,永远不要在生产服务器上测试你的应用程序,这样做的成本太高了。
3 使用PyInstaller安装你的应用程序
一般,用户都不希望在应用程序安装上花费太多时间,不管这个程序最终会给他们带去多大的帮助都是如此。即使你可以让用户去尝试安装程序,但不太懂计算机的用户也有可能会安装失败。简而言之,你需要有一种万无一失的方法,帮助用户把程序顺利地安装到自己的计算机中。PyInstaller 可以帮你做到这一点,它会为你的应用程序生成了一个安装包,用户使用这个安装包就可以很容易地把程序安装到自己的系统中。
幸运的是,PyInstaller可以在所有支持Python的平台上工作,所以你只需要一个工具就可以满足所有安装需求。另外,必要时,你还可以获得特定平台的支持。例如,在Windows平台下,你可以创建有代码签名的可执行文件。Mac开发人员很喜欢PyInstaller为bundle提供了支持。大多数情况下,尽量避免使用特定于平台的特性,除非你真的需要它们。当你使用了特定于某个平台的特性时,安装只能在这个平台上才能成功。
不要使用孤立的工具
网络上有一些Python工具是孤立的,其开发者已不再支持它们。但有些开发人员仍然在使用这些工具,因为他们喜欢这些工具所支持的特性或工作方式。但是,这样做是有风险的,因为你不能确定这个工具是否能和最新版本的Python协同工作。选择工具时,要尽量选择那些受生产厂商完全支持的工具。 如果你必须使用孤立的工具(例如做某个工作时只有孤立的工具可用),那请你确保所用的工具仍然有良好的社区支持。或许工具的生产商已经不再存在了,但至少在你需要支持时,有社区为你提供有用的信息。请注意,使用那些不受支持的工具可能会浪费你大量的时间,因为它们可能无法正常工作了。
我们在网上找到的许多安装工具都是特定于某个平台的。例如,当你寻找一款用于创建可执行文件的安装工具时,你需要注意这个工具创建出的可执行文件是不是特定于某个平台的(至少在你指定的平台上可以运行)。重要的是,你选用的安装工具在任何地方都能正常工作,这样就不会创建出用户无法使用的安装包。如果安装包有问题,那不管你选用什么样的跨平台语言都无济于事。
4 使用pdoc创建开发人员文档
与应用程序有关的文档有两种:用户文档和开发人员文档。用户文档介绍如何使用应用程序,而开发人员文档则描述应用程序如何工作。库只需要一种文档,即开发者文档,而桌面应用程序则只需要用户文档。但是,服务可能同时需要这两种文档,这取决于用户是谁以及服务如何组合在一起。大多数文档可能都会影响到开发人员,而pdoc是一个创建它的简单解决方案。
pdoc实用工具使用你插入到代码中的文档字符串和注释来创建文档,其输出是文本文件或HTML文档。你还可以让pdoc以Web服务器的方式运行,这样人们可以直接在浏览器中查看文档。pdoc实际是epydoc的替代品,现在epydoc的发起人已经不再支持epydoc了。
什么是文档字符串?
第5章和本章中都提到了文档字符串(docstrings)。文档字符串是一种特殊注释,使用三重引号括起,如下所示: """This is a docstring.""" 你可以把文档字符串和一个对象关联起来,例如包、函数、类和方法。在Python中,你创建的任何代码对象都可以有一个文档字符串。文档字符串的目的是描述对象,因此要使用描述性的语句。 查看文档字符串最简单的方法是在对象名称之后使用__doc__()方法。比如,键入print(MyClass.__doc__())将显示MyClass的文档字符串。此外,你还可以使用帮助(比如help(MyClass))来访问文档字符串。好的文档字符串用来指出对象做什么,而非如何去做。 此外,第三方实用工具也可以使用文档字符串。借助于合适的实用工具,你可以为整个库编写文档,而不必亲自动手编写。你使用的实用工具会通过库中的文档字符串来创建文档。如此看来,即使文档字符串和注释有着不同的用途,但它们在Python代码中同样重要。
5 使用Komodo Edit编写程序代码
本书有几章讲到了有关交互式开发环境(Interactive Development Environment,IDE)的内容,但并未给出具体的建议(除了本书使用Jupyter Notebook)。选择IDE时,主要看开发者的需求、技能水平以及要创建的应用程序类型。具体到某类应用程序的开发,有些IDE的确要比其他的好用。对开发新手来说,最好用的IDE当数Komodo Edit。你可以免费下载这个IDE,它包含了丰富的特性,让你获得比使用IDLE更好的编码体验。下面是Komodo Edit提供的一些功能:
- 支持多种编程语言;
- 关键字自动补全;
- 缩进检查;
- 项目支持,自动生成部分程序代码;
- 良好支持。
但是,Komodo Edit和其他IDE有个明显的不同,那就是它提供了一个升级路径。当你发现Komodo Edit无法再满足你的需求时,你可以升级到Komodo IDE,Komodo IDE包含对许多专业级特性的支持,比如代码分析(检查应用程序速度的功能)和数据库浏览器(让数据库更易用)。
6 使用pydbgr调试程序
高端IDE(如Komodo IDE)都会带有完整的调试器,就连Komodo Edit也带有一个简单的调试器。但是,如果你选用的是体量更小、价格更便宜、功能更少的IDE,那你可能根本就看不到有调试器存在。调试器可以帮你找出程序中的错误并修复它们。调试器越好,查找和修复错误所需要的工作量就越少。如果你使用的代码编辑器不带调试器,那你一定要找个外部调试器使用,比如pydbgr。
一款好的调试器包含许多标准特性,比如代码着色(使用颜色来表示关键字之类的内容)。除此之外,不同调试器各自还有一些非标准特性,这使它们彼此不同。下面是pydbgr的一些标准和非标准特性,如果你用的代码编辑器没有附带调试器,pydbgr会是一个不错的选择。
- 智能求值:求值命令帮助我们了解执行某行代码时会发生什么,当然指的是这行代码在程序中实际运行之前。它有助于我们进行假设分析,用以了解程序中有哪些地方可能会出现问题。
- 跨进程调试:一般来说,我们只能调试驻留在同一台机器上的应用程序。实际上,调试器是应用程序进程的一部分,这意味着调试器本身可能会妨碍到调试过程。为此,我们可以使用跨进程调试,这样调试器就不会影响到应用程序,你甚至可以不必在与调试器相同的机器上运行应用程序。
- 全面字节码检查:有时,查看代码转换为字节代码(Python解释器真正理解的代码)的过程有助于我们解决棘手的问题。
- 事件过滤和跟踪:当你的程序在调试器中运行时,它会产生一些事件,这些事件可以帮助调试器了解发生了什么。比如,移动到下一行代码会产生一个事件,从函数调用返回会产生另一个事件,等等。借助这个功能,我们可以控制调试器如何跟踪应用程序以及对哪些事件做出反应。
7 使用IPython进入交互环境
Python Shell可以很好地应用在许多交互任务中。但是,如果你使用过它,你可能已经发现它有一些缺陷。其中,最大的缺陷是Python Shell是纯文本环境,你必须在其中键入命令来执行给定的任务。更高级一点的Shell,比如IPython,支持GUI界面,这使交互环境更友好,这样你就不必记忆各种古怪的命令了。
其实,IPython不仅仅是一个简单的Shell。它提供了一个环境,你可以在这个环境中以新的方式和Python进行交互,例如以图形方式显示你使用Python创建的公式的结果。此外,IPython还是一个容纳其他语言的前端。IPython应用程序向后台的真正的Shell发送命令,因此你可以使用其他语言的Shell,比如Julia和Haskell。(即使你从未听说过这些语言,也不必担心。)
IPython最令人兴奋的特性之一是它能够在并行计算环境下工作。一般Shell都是单线程的,这意味着什么并行计算都做不了,你甚至不能创建多线程环境。仅凭这个特性,IPython就值得你试一试。
8 使用PyUnit测试Python应用程序
某些时候,你需要测试一下自己的应用程序,以确保它们按照预期工作。测试时,你可以通过一次输入一个命令并验证结果来进行测试,或者将这个过程自动化。显然,自动化这个方法会更好,因为你可不想把所有时间都花在测试上,连回家吃饭的时间都没有了,而且手工测试非常非常慢(尤其是当你犯了错误时,这种情况肯定会发生)。PyUnit等工具极大地简化了单元测试(对单个特性进行的测试)过程。
PyUnit的优点是允许你创建真实的Python代码来执行测试。简单地说,你编写的脚本是另一个专门的程序,用于测试主应用程序是否有问题。
或许你会觉得脚本(非你专门编写的应用程序)中可能会有很多Bug。其实,测试脚本一般都设计得非常简单,这会大大减少脚本中的错误,并让脚本中的错误很容易被发现。即便如此,错误有时还是会出现。因此,当你无法找到应用程序中的问题时,你就的确需要检查一下脚本了。
9 使用Isort整理代码
整理代码看上去像是一件很小的事,但是如果你不注意这一点,你的代码很可能会变得乱糟糟的,尤其是当你没有把所有import语句按照字母顺序放到文件顶部时,代码看起来会更乱。在某些情况下,如果你的代码不够整洁,你就很难(并非不可能)弄清楚它到底怎么了。Isort实用程序只对import语句进行排序,并确保它们全部位于源代码文件的顶部,这看上去微不足道,但对你理解和修改源代码有很大的帮助。
有时只要了解某个特定模块需要哪些模块,就可以帮助我们快速找出潜在的问题。例如,你的系统中安装了某个老版本的模块,那了解应用程序都需要哪些模块就可以使查找那个模块的过程变得更容易。
此外,在把应用程序分发给用户时,了解应用程序需要哪些模块也很重要。只有用户的系统中安装了程序所需要的模块,才能确保程序按照预期运行。
10 使用Mercurial进行版本控制
你在学习本书的过程中创建的那些应用程序其实都不复杂。事实上,在你读完这本书并转向更高级的学习之后,你都不太可能需要版本控制。不过,当你进入一个有组织的开发环境中工作、实际开发满足用户需求的应用程序时,版本控制就变得非常重要。简单地说,版本控制就是跟踪发布到实际生产环境中的不同程序版本,并记录不同程序版本之间发生的变化。当你说你在使用MyApp 1.2时,你指的是MyApp应用程序的1.2版。为程序打版本标识很有意义,当程序修改了缺陷或进行了改进之后,版本标识能够让人们知道自己使用的是哪一个版本。
Python版本控制工具有很多种,其中比较有趣的工具是Mercurial。对于几乎所有可运行Python的平台,Mercurial都提供了相应版本,这样在更换平台时你就不必再担心无法使用Mercurial了。(对于你使用的平台,如果Mercurial没有提供相应的可执行文件,你可以从官方站点下载Mercurial源代码自己构建一个。)
与其他产品不同,Mercurial是免费的。即便你打算以后改用其他更高级的产品,你也可以从使用Mercurial管理一个或两个项目的过程中获得有用的经验。
源代码管理(SCM)是指把应用程序的各个版本存储在不同的地方,以便根据需要撤消或重做对源代码所做的修改。对许多人来说,源代码管理似乎是一项艰巨的任务。Mercurial环境相当友好,你可以在其中学习SCM。当你需要返回到程序的旧版本或修复新版本中出现的问题时,应用程序各个版本的源代码必须可用才行。
Mercurial最棒的地方在于它有一个很好的在线教程。学习SCM最好的方法是在你自己的机器上一步步地跟学,哪怕只是翻一翻这些材料也是很有用的。教程的第一部分是关于如何安装Mercurial的。然后,教程讲解如何创建存储库(存储应用程序各个版本的地方),并在创建应用程序代码时使用存储库。学完这个教程之后,你会对源代码控制的原理以及为什么版本控制是应用程序开发的一个重要部分有很好的了解。
Python书推荐
Python编程快速上手 让繁琐工作自动化 第2版(入门)
在本书中,你将学习利用Python编程在几分钟内完成手动需要几小时的工作,无须事先具备编程经验。通过阅读本书,你会学习Python的基本知识,探索Python丰富的模块库,并完成特定的任务(例如,从网站抓取数据,读取PDF和Word文档等)。本书还包括有关输入验证的实现方法,以及自动更新CSV文件的技巧。一旦掌握了编程的基础知识,你就可以毫不费力地创建Python程序,自动化地完成很多繁琐的工作,包括:
- 在一个文件或多个文件中搜索并保存同类文本;
- 创建、更新、移动和重命名成百上千个文件和文件夹;
- 下载搜索结果和处理Web在线内容;
- 快速地批量化处理电子表格;
- 拆分、合并PDF文件,以及为其加水印和加密;
- 向特定人群发送提醒邮件和文本通知;
- 同时裁剪、调整、编辑成千上万张图片。
本书手把手地教你完成每个程序,并通过每章(除第1、2章外)末尾的实践项目帮你改进这些程序,使你能用所学的新技能来自动化地完成类似的任务。
笨办法学Python 3(入门)
在本书中,你将通过完成52个精心设计的习题来学会Python语言。阅读这些习题,照着录入代码(不要复制和粘贴!),修正自己的错误,观察程序的运行。在这个过程中,你将学会计算机的工作原理,知道怎样的程序才算是好程序,以及如何读、写和思考代码。作者还提供了5个多小时的视频,教你如何破坏、修正和调试代码,整个过程就像一边做题一边直播一样。一开始会很难,但很快你就会上手,并且会感觉很棒!
本书适合以下人群阅读
● 零编程经验的初学者
● 了解一两门编程语言的初级人员
● 多年未写过代码的转岗专业人员
● 有丰富的编程经验,想通过快速、简单的速成课程了解Python 3的专业人员
Python 快速入门(第3版)(入门)
本书是Python专业人士Naomi Ceder编写的Python语言的综合指南。她是一位经验丰富的教学者,她既能让读者关注语言的细节,又能使其具备解决实际问题的能力。本书中配有大量贴切的示例和边做边学的习题,有助于读者掌握每一个重要概念。无论读者是要抓取网站内容还是想玩转嵌套元组,都会赞叹本书的清晰、专注和对细节的重视。
本书主要内容
● 明确涵盖Python 3。
● 全面介绍核心库、包和工具。
● 配备精深的习题。
● 新增5章与数据科学相关的内容。
本书专为熟悉编程概念的读者编写,但不要求读者具备Python的使用经验。
笨办法学Python 3 进阶篇
本书作者创建了一套非常有效的Python 3学习体系,只要跟着学,你就会像作者教过的数百万初学者一样获得成功!只要你能自律、投入和坚持! 在《“笨办法”学Python 3》一书中,作者介绍了使用Python 3进行编程的基础知识,而在这本进阶篇中,作者通过让你完成52个精心设计的习题来超越基础,提升水平。书中的每个习题均结合实际演示让你入门,还有附加挑战让你加深理解,以此来帮你掌握一项关键的实践技能。作者还提供了18小时的教学视频,教你如何破坏、修正和调试代码。 首先,你将了解如何分析在软件中想要实现的概念和想法或想要解决的问题;然后,你将逐渐掌握根据自己的分析去设计解决方案,并尽可能简单优雅地实现它们的能力。作者自始至终都强调“过程”,选择正确且适合自己的编程过程,你就会获得开始的动力、解决问题的创造力和保证代码质量的能力,这样你就能写出他人可以信赖的代码。一开始会很难,但很快你就会上手,并且会感觉很棒!
● 使用文本编辑器管理复杂的项目
● 学会利用数据结构的强大功能
● 应用算法处理数据结构
● 掌握必要的文本分析和处理技术
● 使用SQL有效且合逻辑地对存储数据进行建模
● 学习强大的命令行工具和使用技能
● 在完整的项目中结合多种实践
Python Cookbook(第3版)中文版
《Python Cookbook(第3版)中文版》介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字、日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试、调试以及异常,C语言扩展等。
《Python Cookbook(第3版)中文版》覆盖了Python应用中的很多常见问题,并提出了通用的解决方案。书中包含了大量实用的编程技巧和示例代码,并在Python 3.3环境下进行了测试,可以很方便地应用到实际项目中去。此外,《Python Cookbook(第3版)中文版》还详细讲解了解决方案是如何工作的,以及为什么能够工作。
《Python Cookbook(第3版)中文版》非常适合具有一定编程基础的Python程序员阅读参考。