第 2 章 Python 语言入⻔

时间:2021-01-06 15:26:49

目录

2.1低而长的学习曲线

2.2Python的优势

2.3在你的计算机中安装Python

2.4如何运行Python程序

2.5文本编辑器

2.6寻求帮助

Python语言是一种流行的编程语言,在生物信息学和网络编程中广泛应用。Python之所以能被生物学家广泛使用,是因为它特别适合用来解决生物信息学问题。

Python也是一个应用程序,就像你在计算机中安装的其他应用程序一样。对于大多数生物学实验室使用的各种操作系统来说,Python(完全免费)都存在其中并时刻运行着。计算机中的Python应用程序读取Python语言程序(比如你将在本书学习过程中写的任何一个程序),把它翻译成计算机可以理解的指令,并运行(或“执行”)它。

所以,Python这个词语既指你用来编写脚本的程序语言,也表示计算机中运行这些脚本的应用程序/解释器。你可以通过上下文的语境来区分Python的具体含义。

所有的计算机语言,包括Python,都需要一个翻译器应用程序(包括解释器和编译器两种)来把程序翻译成计算机可以实际运行的指令。Python的翻译器应用程序通常指的就是Python解释器,当然它也包括Python编译器。你会发现一般把Python程序叫做Python脚本或者Python源码。程序、应用程序、脚本和可执行文件这四个术语在某种程度上是通用的,在本书中我都把它们叫做“程序”。

2.1低而长的学习曲线

对于Python来说,令人高兴的一点就是你很快就可以学会Python程序的编写。大体上来看,Python的学习曲线是比较低的。这也就是说你可以轻松入⻔,不需要学习掌握太多的知识就可以写出非常实用的程序。

Python提供了不同的编程范式,这已经超出了本书的范畴,所以我并不打算对此进行深入探讨,但我还是要说一句,最流行的编程范式叫做命令式编程,这也是你将在本书中学习到的编程范式。另一种比较流行的编程范式叫做面向对象编程,Python对这种编程范式也有很好的支持。其他编程范式还包括函数式编程和逻辑编程。

尽管你可以轻松入⻔,但如果想学习Python中的所有知识,那将花费你大量的精力。大多数人都只学习像本书中的知识点一样的基本知识,当需要时再学习其他的相关主题。

在继续进行之前,我们先讨论几个基本概念:什么是计算机程序?

计算机程序就是用特定编程语言写成的一系列指令,这些指令可以被计算机读取。一个程序可以非常简单,简单到就像下面这个把DNA序列打印到计算机屏幕上的Python语言程序一样:

#python2.xprint'ACCTGGTAACCCGGAGATTCCAGCT'#python3.xprint('ACCTGGTAACCCGGAGATTCCAGCT')

就像在计算机中存储各种数据(不限于程序)一样,要在文件中编写和保存Python语言程序。文件以成组分层的形式进行存储,这些不同的组在Macintosh和Windows系统中叫做文件夹,在Unix和Linux系统中叫做目录,其实两者是完全可以互换使用的。

什么是编程语言?

有一系列详细定义的语法规则来指导计算机程序的编写。通过学习编程语言的这些语法规则,你可以编写出在计算机上运行的程序。编程语言和英语等我们日常使用的口语是非常相似的,只是针对计算机系统进行了严格而特定的定义。经过一定的训练,就可以轻松阅读并编写计算机程序。有许多不同的编程语言,在本书中你将学习Python语言。

程序员编写的程序也叫做源代码,有时也简称为源或代码。源代码需要翻译成机器语言,计算机才能够运行它。机器语言都是二进制数字,非常难于阅读和编写,通常把它叫做二进制可执行程序。就像在本章中你将看到的那样,使用Python解释器(或编译器),你可以把Python程序变成可以运行的程序。

什么是计算机?

哦,……

好吧,这是个愚蠢的问题。计算机就是你在计算机商城里买到的机器。但实际上,你应该有一个清晰的认识,明白计算机到底是怎样的一台机器。本质上来说,计算机就是一台可以运行不同程序的机器。正是这种最基本的灵活性和适用性,使得计算机成为如此有用且通用的工具。它是可编程的,你将学习如何使用Python编程语言来对它进行编程。

2.2Python的优势

接下来的几个小节将对Python的几个优点进行说明。

2.2.1易于编程

编程语言的易用性体现在不同的方面。我说“容易”指的是对于程序员来说易于编程。

Python的一些特性,使得解决常⻅的生物信息学问题非常容易。它可以处理ASCII文本文件或平面文件中的信息,而许多重要的生物学数据就是存储在这样的文件中,GenBank和PDB等数据库就是如此。(关于ASCII的讨论请参看第4章;GenBank和PDB分别是第10章第11章的讨论主题。)使用Python,可以容易得处理DNA和蛋白质的⻓序列,方便得控制一个或多个其他程序。最后再举一个例子,Python曾用来把生物学研究实验室概况和研究成果放在实验室的动态网站上。Python可以胜任所有的这些任务,当然绝不止这些。尽管Python是一种非常适用于生物信息学的编程语言,但它绝不是唯一的选择,也不一定总是最好的选择。其他编程语言,如C和Java,也在生物信息学中使用。如何选择一种编程语言,这取决于需要解决的问题、程序员的能力、可利用的系统等因素。

2.2.2快速原型

在生物学研究中使用Python的另一个非常重要的优势就是,程序员可以非常迅速得写出一个典型的Python程序(这被称为快速原型)。与C和Java相比,许多问题用很少的几行Python代码就可以解决,这也直接导致了它在生物学研究中的流行。在一个研究中,经常需要写一些处理新问题的程序,这些程序仅会偶尔使用或使用一次,或者需要被频繁修改。使用Python,你只需折腾几分钟或者几个小时就可以写出这样的程序,继续后续的研究工作。当在工作中选择使用Python时,这种快速原型的能力常常是需要重点考虑的因素。常常可以遇到同时精通Python和C的程序员,他们声称在编程时Python要比C快五到十倍。这种差距在人手不足的研究实验室中尤其显著。

2.2.3可移植性,速度和程序维护

可移植性表示编程语言可以在各种不同的计算机操作系统上运行。Python的可移植性就不错,在生物学实验室中使用的所有现代计算机中,它都可以使用。如果你在自己的Mac中用Python编写一个分析DNA的程序,然后把它放到Windows计算机中,你会发现它通常可以正常运行,或者仅需很小的修改就可运行。

速度表示程序运行的速度。在这方面,Python虽然不是最好的,但表现也不错。考虑到运行的速度,最常⻅的选择就是C。用C编写的程序,其运行速度通常比对应的Python程序快两倍甚至更多。(有许多利用编译器等来提高Python运行速度的方法,但依然……。)在许多组织中,都是先用Python来编写程序,然后再把那些确实需要提高运行速度的部分用C重写。事实上,运行速度只是偶尔才会成为需要考虑的关键因素。

编程相对是比较昂贵的,因为它需要时间和熟练的人员,它是劳动密集型的。另一方面,计算机和计算机时间(在有了*处理单元之后通常叫做CPU时间)却是相对便宜的。无论如何,在一天内的大部分时间里,大多数桌面计算机都出于空现状态。所以最好的策略就是节省程序员的时间,让计算机工作。一般来说使用Python就可以了,除非你的程序必须运行四秒而非十秒。

程序维护是保证程序正常运行的常规工作,比如给程序添加特性、扩展程序以便能够处理更多类型的输入、移植程序以便在其他计算机系统上运行、修复bug等工作。编写程序需要花费一定的时间、精力和财力,而好的程序在维护阶段的花费远比第一次编写时的花费要高。编写程序时使用一种语言和特定的⻛格是非常重要的,因为这将使得维护工作相对容易一些,Python就是这样的编程语言。(就像其他编程语言一样,你可以用Python写出晦涩难懂、难于维护的代码,但我会给你一些指导,使你的程序可以被其他程序员轻松读懂。)

2.2.4Python的版本

向其他所有流行软件一样,Python也在不断成⻓,在近17年的历史中不断发展变化。

Python的作者吉多·范罗苏姆和庞大的开发社区会定期发布新的版本。这些新的版本都进行了认真的设计,以便向下兼容旧版本写成的大部分程序,但是偶尔也会添加一些新的特性,这些特性在旧版本的Python中无法正常工作。

本书假设你安装了Python3.5或者更高的版本。如果你的计算机中安装了Python,那很有可能是Python3.5,但最好去确认一下。在Unix或者Linux系统中,以及MS-DOS或者MacOS

X的命令行窗口中,命令python-V会显示Python的版本号。在我的计算机中,使用的是Python3.5.4。如何计算机中Python的版本号小(很有可能是2.6),你最好安装一个最新版本的Python,这样本书中的大部分程序才能正常运行。

未来的版本会如何呢?Python总实在进化,Python3.8已经近在眼前了。本书中的代码在Python3.8中能否依然正常工作?答案是肯定的。尽管Python3.8要添加一些新的东西进去,运行本书中的Python代码不会存在太大的问题。

2.3在你的计算机中安装Python

接下来的几个小节将指导你在最常⻅的计算机系统中安装Python。

2.3.1也许Python已经安装上了!

许多计算机,尤其是Unix和Linux计算机,已经预装了Python。(注意Unix和Linux本质上是一样的操作系统;Linux是Unix操作系统的克隆,或者说是功能性的拷⻉。)所以,首先确认一下Python是不是已经被安装上了。在Unix和Linux系统中,在命令提示符后面输入一下命令:

$ python -V

如果Python已经安装上了,你会看到和我自己Linux计算机上类似的信息:

Python 3.5.4

如果没有安装Python,你会看到如下类似的信息:

python: command not found

如果你看到这样的信息,并且你使用的是大学或公司的公用Unix系统,一定要向系统管理员进行确认,也许Python已经安装上了,但是你的环境设置导致你无法找到它。(或者,系统管理员可能会说:“你要用Python?没问题,我来给你安装。”)

在Windows或者Macintosh中,可以在程序目录中或者使用查找程序查找python。在MS-DOS的命令窗口或者MacOSX的shell窗口中,你同样可以尝试输入python -V。(注意MacOSX其实是Unix系统!)

2.3.2没有网络可用?

如果你没有网络可用,你可以把计算机给你可以联网的朋友,让他帮忙安装Python。你也可以利用朋友的计算机,通过Zip磁盘片或者刻录一张光盘把Python软件复制到你的计算机中。通过各种途径(咨询当地的软件商店),你也可以获得商业的含有Python的包装光盘,此外,像O’Reilly出版的《深入浅出Python》等书籍中也会包含Python的光盘。除了安装Python,本书中的所有内容都不要联网。在上下班坐地铁的时候,或者其他类似的情况,如果你想做做练习,也未尝不可。除了安装Python,本书中需要联网的内容主要包括:从书籍网站上下载示例代码了,这样你就不用一行一行输入计算机了;下载并练习测试题;从各种生物学数据库中查找生物学数据;在计算机中没有安装Python文档的情况下联网查阅Python文档。

要知道,如果你想做生物信息,因特网是必不可少的。你可以在没有联网的情况下通过本书学习编程的基本原理,但是你需要联网才能下载生物信息学软件和数据。

2.3.3下载

Python是一个应用程序,所以在你的计算机中下载和安装Python的过程和安装其他应用程序是完全一样的。

有一个网站是学习Python相关知识的起点,它就是https://www.python.org/。网站主⻚上有一个Downloads点击按钮,通过它你可以找到在计算机上安装Python所需要的所有东西。在下载⻚面,有获取帮助的链接和其他相关链接。所以即使本书中的内容过时了,你仍然可以访问Python站点,找到安装Python所需要的相关内容。

下载和安装Python通常都比较容易,事实上,大部分时间都还是比较惬意的。然而,有时为了让它能够正常工作,你还是需要付出一些努力的。如果你是编程方面的新手,并且碰到了一些棘手的问题,你最好向实验室中使用Python的专业程序员、管理员、教师等人寻求帮助。

简言之,在计算机中安装Python的基本步骤如下所示:

1.确认一下Python是否已经安装上了;如果已经安装了,确认一下Python的版本不低于Python3.5。

2.连接网络,打开Python官网的主⻚https://www.python.org/

3.进入下载⻚面,确定你要下载的Python发行版。

4.下载正确的Python发行版。

5.在你的计算机中安装此发行版。

2.3.4二进制vs.源代码

当从站点https://www.python.org/中下载Python的时候,你需要在二进制发行版和源代码发行版中进行选择。在计算机中安装Python的最好选择就是使用已经编译好的二进制版本,因为它最容易安装。然而,如果没有二进制版本可用,或者你想配置安装Python时的各种选项,就可以下载Python的源代码。源代码本身是用C语言编写的,你可以使用C编译器对它进行编译。对于新手来说,从源代码进行编译实在是太过复杂了,所以还是尽量寻找适合计算机操作系统的二进制版本吧。

2.3.5安装

接下来的几个小节是在特定平台上安装Python的操作指南。

Unix和Linux

如果你的Unix或者Linux计算机中没有安装Python,首先去寻找二进制包进行安装。在https://www.python.org/站点的下载⻚面上,你会看到二进制发行版的副标题。选择Unix或Linux,看看是否有适用于你的操作系统的二进制版本。有许多版本可以下载安装,一旦你下载了二进制版本,根据网站上的指南就可以把Python安装上了。许多Linux发行版都在它们的网站上维护着最新的Python二进制版本。比如,如果你使用的是红帽Linux系统,你需要首先确认系统的版本(使用uname-a),然后找到对应的rpm文件,下载之后进行安装。红帽Linux系统有Python的rpm文件,用户可以使用以下命令进行安装:

rpm -Uvh python.rpm

(python.rpm文件的实际名称可能有所变化)。

如果没有适用于你使用的Unix或Linux的Python二进制版本,你就必须要从源代码进行编译了。这种情况下,还是从Python网站开始,点击下载按钮,选择源代码发行版。源代码中有一个INSTALL文件,它是指导你进行操作的指南,从下载源代码、在系统中进行安装、从源代码编译成二进制可执行文件,到最后安装二进制可执行文件,每一个步骤都有详细的说明。

前面已经提到,相比安装已经编译好的二进制版本,从源代码进行编译是一个漫⻓的过程,并且需要仔细阅读操作指南,但通常这还是值得的。为了从源代码安装Python,你需要一个C编译器。如今,某些Unix系统中并没有一个完整的C编译器,而在Linux中通常都安装有一个叫做gcc的免费的C编译器。当然,你也可以在任何缺少C编译器的Unix(或Windows,或Mac)系统中安装gcc。

Macintosh

Mac Python网站https://www.python.org/downloads/mac-osx/上(你可以从Python网站上点击下载按钮进入该网站)清晰得解释了Mac Python的安装步骤,此处是一个简要的概述。

在Mac Python网站上,点击获取Mac Python,按照指引即可下载该应用程序。它会下载到你的桌面上,双击即可进行安装。

Windows

对于不同的Windows版本,有好多二进制发行版可供选用。因为Windows是和因特尔32位芯片密切相关的,所以这些二进制发行版通常叫做Wintl或者Win32二进制包。现在标准的Python发行版是来自https://www.python.org/downloads/windows/在上面你可以找到完整的安装说明。

2.4如何运行Python程序

如何运行Python的详细步骤,取决于你的操作系统。你安装Python时参考的操作指南中包含了你需要知道的所有相关内容,此处我仅进行简短的总结,这对于起步来说足够了。

2.4.1Unix或Linux

在Unix或Linux中,你通常会在命令行中运行Python程序。如果你位于程序所在的目录中,假设这个Python程序文件叫做this_program,你通过输入pythonthis_program就可以运行它。如果你在另外的目录中,就必须要给出程序的路径名,比如:

python /usr/local/bin/this_program

因为不同的计算机可能会把Python安装在不同的目录中,所以通常情况下,你会在this_program文件的第一行指定系统中Python的正确路径。在我的计算机中,我的Python程序中的第一行是:

#!/usr/bin/python

你可以通过键入which python来找到你系统中Python的安装路径。

使用chmod命令,你可以赋予程序可执行权限。比如,你可以键入:

chmod 755 this_program

如果你的第一行设置正确,并且也使用了chmod命令,你可以直接键入Python程序的文件名来运行它。所以,如果你在程序所在的目录中,你可以键入./this_program;如果程序所在的目录包含在$PATH或者$path环境变量中,你可以键入this_program。

如果你的Python程序没有正常运行,命令窗口中的shell会给出错误信息,这些错误信息也许会让你晕头转向。比如,我的Linux系统中的bash给出了如下所示的错误信息:

bash: ./my_program: No such file or directory

出现该错误信息有两种可能:在当前目录中确实没有叫做my_program的程序,或者my_program的第一行没有给出Python的正确路径。你需要好好检查一下,尤其是当运行来源于pypi(参看附录A)的程序时,这些程序第一行中Python的路径往往都不相同。另外,如果你键入my_program,可能会得到这样的错误信息:

bash: my_program: command not found

这表示操作系统找不到该程序。但它就在当前目录中呀!问题可能出在你的$PATH或$path环境变量并不包含当前目录,所以系统根本就没在当前路径中寻找该程序。这种情况下,根据使用的shell不同,你需要修改$PATH或$path环境变量,或者键入./my_program而非my_program。

2.4.2Macs

最新的MacOSX其实是一个Unix系统,因此你也可以通过命令行来运行Python程序,就像前述在Unix和Linux系统中的操作那样。

2.4.3Windows

在Windows系统中,Python程序通常和.py文件名后缀相关联。在Python安装过程中,通过修改注册表的设置实现了这种关联。有了这种关联,在MS-DOS命令窗口中,你就可以键入this_program或者pythonthis_program.py来运行this_program.py程序。Windows中有一个PATH变量,存储着系统从中寻找程序的文件夹,在Python安装过程中,该变量被修改以便收录包含Python应用程序的文件夹的路径,该路径通常为c:\python。如果你想运行一个Python程序,该程序所在的文件夹并为被PATH变量所收录,你可以键入该程序的完整路径,如python c:\windows\desktop\my_program.py.

2.5文本编辑器

既然已经设置好了计算机,也安装上了Python,接下来就需要选择一个文本编辑器并学习其基本知识了。文本编辑器用来键入程序等文档,并把文档内容保存到文件中。所以要编写一个Python程序,你需要使用一个文本编辑器。尽管某些文本编辑器学习起来比较容易,但如果以前你从未使用过文本编辑器,学习起来工作量也是不小的。下面是一些最为流行的编辑器,此处依然按照操作系统的类型进行介绍:

Unix或Linux

vi和Emacs都是比较复杂(但是很棒)的编辑器。pico、xedit和其他一些编辑器(nedit、gedit、kedit)非常容易使用,学习起来也不难,但功能并不是很强大。

Macintosh

MacPython内置的编辑器就很不错。有一个很好的收费编辑器叫做BBEdit,它对Python进行了优化,相对应的免费版本叫做BBEditLite。你也可以使用共享编辑器Alpha或MicrosoftWord(确保把文件保存为ASCII纯文本)。

Windows

Notepad已经比较流行了,用起来也令人满意;MicrosoftWord也是可以使用的,但一定要保存为ASCII或纯文本。在基于Windows的计算机中进行Python编程,强烈推荐使用Sublime Text的Windows版本,虽然学习起来有些复杂。当然,还有好多其他的编辑器,我就使用Unix编辑器vi的一个免费版本——移植到Windows中的Vim。

还有许多其他的文本编辑器可以使用。许多计算机上都有多种编辑器可供选择。(有些程序员在他们的职业生涯中会试图编写一个编辑器,或者对已有的编辑器进行某些功能上的扩展,所以可供选择的编辑器真的是非常众多的。)

有些编辑器非常容易学习和使用;而有些编辑器则有众多的特性、相应的指南书籍、讨论组和网站等,学习它们还是要花费一定精力的。如果你是一个程序员菜⻦,不要自找麻烦,选择一个易用的编辑器吧。日后,如果你喜欢冒险,可以进一步学习使用一个“神”级的编辑器,它的某些特性会让你事半功倍。不知道在你的计算机中有哪些可用的编辑器?可以向程序员或其他用户咨询一下,或者去查阅计算机系统中附带的文档。

2.6寻求帮助

确保你有必需的文档。如果你向前述那样安装了Python,作为Python默认安装的一部分,文档已经安装到了计算机中,而Python发行版中附带的指南解释了如何去获取这些文档。还有一个很棒的在线文档,可以在Python网站主⻚上找到它。

各种编程资源是寻找编程问题答案的好地方,而Python的资源对使用Python编程来说是必需的。去附录A看一下吧,从中你可以找到书籍、在线文档、可用的程序、新闻组、存档、期刊和会议等各种资源。

既然你已经开始编程,你将接触到最重要的书籍、网站、网络新闻组及其可搜索的存档、当地的大师(附近该方面的专家)以及程序文档。这些文档包括程序手册(打印版或在线版)和常⻅问答集(FAQs)。

多数编程语言都有一个标准的文档集,包括语言定义和使用的完整说明。Python的该文档集作为在线手册包含在了程序中。尽管编程手册通常写的不咋地,但最好是做好不得不面并“生啃”它们的准备。视若无睹、充耳不闻的能力有时候也是一种宝贵的财富。Python的手册并不是很糟糕,它最大的问题就是,像其他语言的手册一样,把所有的细节都放在了里面,所以刚一开始可能会有种卷帙浩繁的感觉。不过,教程文档可以帮助初学者对

Python文档进行梳理,这绝对是初学者的福音。

最后,我极力主张程序员菜⻦去找一些经验丰富的Python程序员,他们可以帮你解决一些偶尔遇到的问题。他可以是课程的教师或助教、同事,或者是沦落到当地计算机商店的某个人、在在线新闻组(有专⻔针对Python初学者的新闻组)中回答你提问的那个人。在你的初学阶段,偶然和一个经验丰富的用户进行的交谈,会使你避免数个小时钻牛⻆尖的苦思冥想,这是非常有可能的。大部分程序员都非常乐意向初学者伸出援手,或者提供一定的建议。在编程界,友好、学术的气氛十分盛行。

但是还有一个警告:如果有人重复提问可以在FAQs或其他标准文档中可以找到答案的问题,这往往会激怒那些专家们。对于这种类型的问题,你有时会看到RTFM——Read The F(ine) Manual——的答复。所以在重复提问之前,一定要去FAQs中查看一下是否已有解答,以避免浪费别人宝贵的时间。

(我忍不住要提起一件偶然发生的轶事。)在我学习编程时接受的第一个任务中,有一个问题令我寸步难行,而这个问题看上去并没有很明显的解决方案。于是我向被公认为实验室里最好的程序员求助。我对遇到的困境详细得进行了描述,而他则耐心得聆听着。当我解释完后,他笑着向我说道:“男儿有泪不轻谈,自力更生当为先!”听到此话,我不免有些垂头丧气,丈二和尚摸不着头脑。但完全想不到的是,他给出的建议完全是在假装深沉,而他最终也向我进行了解释,并指点我找到了解决办法。