内容来源:
版本:1.20
A Byte of Python
Copyright © 2003-2005 Swaroop C H
简明 Python 教程《简明 Python 教程》为 "A Byte of Python" 的唯一指定简体中文译本,版权 © 2005 沈洁元
我最初接触Python是当我需要为我的软件钻石写一个方便安装过程的安装程序的时候。我得在Python和Perl语言中选择一个绑定Qt库。我在网上做了一些研究,偶然发现了一篇文章。那是Eric S. Raymond(著名的电脑高手)谈Python如何成为它最喜欢地编程语言的一篇文章。我同时发现PyQt绑定与Perl-Qt相比要出色得多,所以我选择了Python语言。
之后我开始寻找一本关于Python的优秀书籍。我竟然找不到!虽然我找到了一些O'Reilly的书,不过它们不是太贵就是如同一本参考手册而不是一本指南。我最后使用了Python附带的文档,不过它太简略了。那个文档确实很好的给出了Python的概念,不过不够全面。尽管最后我根据我以前得编程经验掌握了那个文档,不过我觉得它完全不适合于新手。
大约在我首次使用Python语言的六个月之后,我安装了那时最新的Red Hat 9.0 linux。在我玩弄KWord应用程序的时候,我突然想写一点关于Python的东西。很快我就写了30多页,然后我开始认真地想办法把它变成一本完整的书。经过 多次 的改进和重写,它终于成为了一本有用的完整的Python语言学习指南。我把本书贡献给开源软件者们。
本书来自于我个人学习Python的笔记,不过我尽力让它更加适合别人的口味。
在开源精神的鼓舞下,我收到了许多建设性的建议和批评以及来自热心读者的反馈,它们使这本书变得更加出色。
本书目前仍然在进一步完善中。许多章节已经频繁地做了修改。然而本书已经十分成熟了,你一定可以很容易地通过它学习Python。如果你觉得本书中有什么错误或者难懂的地方,请告诉我。
本书将来计划增加更多的章节,包括wxPython,Twisted,有可能的话甚至还有Boa Constructor。
本书(原版)依照创作共用约定(署名-非商业作品-保持一致)发布。简单地说,你只要署上我的名字,就可以免费复制、分发和展示本书。未得到我的允许,你禁止把本书用于商业目的。你在修改本书的时候,必须清楚地标明所有做了改动的地方,你发布修改后的作品时也必须遵照与本书相同的约定。
请访问创作公用约定的网站浏览约定全文,或者查看一个简单易懂的约定描述。那里还有一个连环画似的约定条款的解释。
我尽了很大的力让这本书即生动又尽可能的准确。然而,如果你找到任何不太令你满意的地方或者错误,或者是需要改进的地方,请告诉我以便我改正它们。你可以把它们通过swaroop@byteofpython.info发送给我。
Python语言是少有的一种可以称得上即简单又功能强大的编程语言。你将惊喜地发现Python语言是多么地简单,它注重的是如何解决问题而不是编程语言的语法和结构。
Python的官方介绍是:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。
Python语言的创造者Guido van Rossum是根据英国广播公司的节目“蟒蛇飞行马戏”命名这个语言的,并非他本人特别喜欢蛇缠起它们的长身躯碾死动物觅食。
2.Python的特色
简单Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。
易学就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
免费、开源Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
高层语言当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。
这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!
解释性这一点需要一些解释。
一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
面向对象Python即支持面向过程的编程也支持面向对象的编程。在 面向过程 的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在 面向对象 的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和java相比,Python以一种非常强大又简单的方式实现面向对象编程。
可扩展性如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
可嵌入性你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
丰富的库Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、xml、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。
除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
3.为什么不使用Perl
也许你以前并不知道,Perl是另外一种极其流行的开源解释性编程语言。
如果你曾经尝试过用Perl语言编写一个大程序,你一定会自己回答这个问题。在规模较小的时候,Perl程序是简单的。它可以胜任于小型的应用程序和脚本,“使工作完成”。然而,当你想开始写一些大一点的程序的时候,Perl程序就变得不实用了。我是通过为Yahoo编写大型Perl程序的经验得出这样的总结的!
与Perl相比,Python程序一定会更简单、更清晰、更易于编写,从而也更加易懂、易维护。我确实也很喜欢Perl,用它来做一些日常的各种事情。不过当我要写一个程序的时候,我总是想到使用Python,这对我来说已经成了十分自然的事。Perl已经经历了多次大的修正和改变,遗憾的是,即将发布的Perl 6似乎仍然没有在这个方面做什么改进。
我感到Perl唯一也是十分重要的优势是它庞大的CPAN库——综合Perl存档网络。就如同这个名字所指的意思一样,这是一个巨大的Perl模块集,它大得让人难以置信——你几乎用这些模块在计算机上做任何事情。Perl的模块比Python多的原因之一是Perl拥有更加悠久的历史。或许我会在comp.lang.python上建议把Perl模块移植到Python上的计划。
另外,新的Parrot虚拟机按设计可以运行完全重新设计的Perl 6也可以运行Python和其他解释性语言如Ruby、php和Tcl等等。这意味着你将来 或许 可以在Python上使用所有Perl的模块。这将成为两全其美的事——强大的CPAN库与强大的Python语言结合在一起。我们将拭目以待。
4.程序员的话
读一下像ESR这样的超级电脑高手谈Python的话,你会感到十分有意思:
Eric S. Raymond是《The Cathedral and the Bazaar》的作者、“开放源码”一词的提出人。他说Python已经成为了他最喜爱的编程语言。点击打开链接这篇文章也是促使我第一次接触Python的真正原动力。
Bruce Eckel著名的《Thinking in Java》和《Thinking in C++》的作者。他说没有一种语言比得上Python使他的工作效率如此之高。同时他说Python可能是唯一一种旨在帮助程序员把事情弄得更加简单的语言。请阅读完整的采访以获得更详细的内容。
Peter Norvig是著名的Lisp语言书籍的作者和Google公司的搜索质量主任(感谢Guido van Rossum告诉我这一点)。他说Python始终是Google的主要部分。事实上你看一下Google招聘 点击打开链接的网页就可以验证这一点。在那个网页上,Python知识是对软件工程师的一个必需要求。
Bruce Perens是OpenSource.org和UserLinux项目的一位共同创始人。UserLinux旨在创造一个可以被多家发行商支持标准的Linux发行版。Python击败了其它竞争对手如Perl和Ruby成为UserLinux支持的主要编程语言。
如果你正在使用一个Linux的发行版比如Fedora或者Mandrake或者其他(你的选择),或者一个BSD系统比如FreeBSD,那么你可能已经在你的系统里安装了Python。
要测试你是否已经随着你的Linux包安装了Python,你可以打开一个shell程序(就像konsole或gnome-terminal)然后输入如下所示的命令python -V
。
$ python -VPython 2.3.4
注释$
是shell的提示符。根据你的操作系统的设置,它可能与你那个不同,因此我只用$
符号表示提示符。
如果你看见向上面所示的那样一些版本信息,那么你已经安装了Python了。
如果你得到像这样的消息:
$ python -Vbash: python: command not found
那么你还没有安装Python。这几乎不可能,只是极其偶尔才会遇到。
在这种情况下,你有两种方法在你的系统上安装Python。
利用你的操作系统附带的包管理软件安装二进制包,比如Fedora Linux的yum、Mandrake Linux的urpmi、Debian Linux的apt-get、FreeBSD的pkg_add等等。注意,使用这种方法的话,你需要连接因特网。
你也可以从别的地方下载二进制包然后拷贝到你的PC中安装。
你可以从源代码编译Python然后安装。在网站上有编译的指令。
2.Windows用户Windows®用户可以访问Python.org/download,从网站上下载最新的版本(在写本书的时候,最新版本是2.3.4版)。它的大小大约是9.4MB,与其他大多数语言相比是十分紧凑的。安装过程与其他Windows软件类似。
提示即便安装程序为你提供了不检查 可选 组件的选项,你也不要不作任何检查!有些组件对你很有用,特别是集成开发环境。
有趣的是,大约70%的Python下载是来自Windows用户的。当然,这并不能说明问题,因为几乎所有的Linux用户已经在安装系统的时候默认安装了Python。
在Windows命令行中使用Python如果你想要从Windows命令行调用Python,那么你需要先正确的设置PATH变量。对于Windows 2000、XP、2003,点击控制面板->系统->高级->环境变量。在“系统变量”表单中点击叫做PATH的变量,然后编辑这个变量,把;C:/Python23加到它的结尾。当然,是Python所在的正确目录名。对于较旧版本的Windows,把下面这行加到文件C:/AUTOEXEC.BAT中:PATH=%PATH%;C:/Python23,然后重新启动系统。对于Windows NT,则使用AUTOEXEC.NT文件。
3.概括对于Linux系统,很可能你已经在你的系统里安装了Python。否则,你可以通过你的发行版附带的包管理软件安装Python。对于Windows系统,安装Python就是下载安装程序然后双击它那么简单。从现在起,我们将假设你已经在你的系统里安装了Python。
1.简介
我们将看一下如何用Python编写运行一个传统的“Hello World”程序。通过它,你将学会如何编写、保存和运行Python程序。
有两种使用Python运行你的程序的方式——使用交互式的带提示符的解释器或使用源文件。我们将学习这两种方法。
2.使用带提示符的解释器
在命令行的shell提示符下键入python,启动解释器。现在输入PRint 'Hello World'
,然后按Enter键。你应该可以看到输出的单词Hello World。
对于Windows用户,只要你正确的设置了PATH变量,你应该可以从命令行启动解释器。或者你可以选择使用IDLE程序。IDLE是集成开发环境的缩写。点击开始->程序->Python 2.3->IDLE(Python GUI)。Linux用户也可以使用IDLE。
注意,>>>是你键入Python语句的提示符。
例3.1 使用带提示符的Python解释器
$ pythonPython 2.3.4 (#1, Oct 26 2004, 16:42:40)[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> print 'hello world'hello world>>>
注意,Python会在下一行立即给出你输出!你刚才键入的是一句Python 语句 。我们使用print
(不要惊讶)来打印你提供给它的值。这里,我们提供的是文本Hello World
,它被迅速地打印在屏幕上。
如何退出Python提示符如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。如果是在Windows命令行中,则按Ctrl-z再按Enter。
3.挑选一个编辑器
在我们开始讲述以源文件方式编写Python程序之前,我们需要一个编辑器来写源文件。挑选一个编辑器确实是极其重要的。你挑选一个编辑器就如同你挑选一辆你将购买的轿车一样。一个好的编辑器会帮助你方便地编写Python程序,使你地编程旅程更加舒适,帮助你更加快捷安全地到达目的地(实现目标)。
对于编辑器的基本要求之一是语法加亮功能,利用这一功能,你的Python程序的不同部分被标以不同的颜色,这样你可以更好 看清楚 你的程序,使它的运行显得形象化。
如果你使用Windows,那么我建议你使用IDLE。IDLE具备语法加亮功能,还有许多其他的功能,比如允许你在IDLE中运行你的程序。特别值得注意的是:不要使用Notepad——它是一个糟糕的选择,因为它没有语法加亮功能,而且更加重要的是,它不支持文本缩进。而我们将会看到文本缩进对于我们来说极其重要。一个好的编辑器,比如IDLE(还有VIM)将会自动帮助你做这些事情。
如果你使用Linux/FreeBSD,那么你有很多种选择。如果你是一位有经验的程序员,你一定已经在使用VIM或者Emacs了。勿庸置疑,它们是两个功能最强大的编辑器。使用它们编写你的Python程序,你将从中受益。我个人使用VIM编写我的大多数程序。如果你是一个初学编程的人,那么你可以使用Kate,它也是我最喜欢的编辑器之一。只要你愿意花时间学习使用VIM或Emacs,那么我强烈建议你一定要学习两者之一,因为从长远看来它们对你是极其有帮助的。
如果你还想寻找一下其他可供选择的编辑器,可以看一下详尽的Python编辑器列表,然后作出你的选择。你也可以使用Python的IDE(集成开发环境)。请看一下详尽的支持Python的IDE列表以获得详尽的信息。一旦你开始编写大型的Python程序,IDE确实很有用。
我再一次重申,请选择一个合适的编辑器——它能使编写Python程序变得更加有趣、方便。
4.使用源文件
现在让我们重新开始编程。当你学习一种新的编程语言的时候,你编写运行的第一个程序通常都是“Hello World”程序,这已经成为一种传统了。在你运行“Hello World”程序的时候,它所做的事只是说声:“Hello World”。正如提出“Hello World”程序的Simon Cozens[1]所说:“它是编程之神的传统咒语,可以帮助你更好的学习语言。”
启动你选择的编辑器,输入下面这段程序,然后把它保存为helloworld.py。
#!/usr/bin/python# Filename : helloworld.py
print
'Hello World'
(源文件:code/helloworld.py)
为了运行这个程序,请打开shell(Linux终端或者DOS提示符),然后键入命令python helloworld.py。如果你使用IDLE,请使用菜单Edit->Run Script或者使用键盘快捷方式Ctrl-F5。输出如下所示。
$ python helloworld.pyHello World
如果你得到的输出与上面所示的一样,那么恭喜!——你已经成功地运行了你的第一个Python程序。
万一你得到一个错误,那么请确保你键入的程序 准确无误 ,然后再运行一下程序。注意Python是大小写敏感的,即print
与Print
不一样——注意前一个是小写p
而后一个是大写P
。另外,确保在每一行的开始字符前没有空格或者制表符——我们将在后面讨论为什么这点是重要的。
让我们思考一下这个程序的前两行。它们被称作 注释 ——任何在#符号右面的内容都是注释。注释主要作为提供给程序读者的笔记。
Python至少应当有第一行那样的特殊形式的注释。它被称作 组织行 ——源文件的头两个字符是#!,后面跟着一个程序。这行告诉你的Linux/Unix系统当你 执行 你的程序的时候,它应该运行哪个解释器。这会在下一节做详细解释。注意,你总是可以通过直接在命令行指定解释器,从而在任何平台上运行你的程序。就如同命令python helloworld.py一样。
重要在你的程序中合理地使用注释以解释一些重要的细节——这将有助于你的程序的读者轻松地理解程序在干什么。记住,这个读者可能就是6个月以后的你!
跟在注释之后的是一句Python 语句 ——它只是打印文本“Hello World”。print
实际上是一个操作符,而“Hello World”被称为一个字符串——别担心我们会在后面详细解释这些术语。
5.可执行的python程序
新闻热点
疑难解答