Dive Into Python

审校 (5.4b):2007 年 6 月—9 月

译文版 (5.4):2005 年 12 月—2006 年 4 月 (update-060425)

英文原版 (5.4):2004 年 5 月 20 日

本书存放在 http://diveintopython.org/ (英文原版) 和 http://www.woodpecker.org.cn/diveintopython(中文版)。如果你是从别的地方看到它的,可能看到的不是最新版本。

Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in 附录 G, GNU Free Documentation License.

允许在 GNU 自由文档协议 (1.1 版,或自由软件基金会出版的任何更新版本) 的许可下复制、发行且/或修改本文档;本文档没有不变部分,没有前封面文本,没有封底文本。该协议的一份中文版参考译文包含在 附录 H, GNU 自由文档协议 中。

在这本书中的例程是自由软件。你可以在遵守 Python 协议 (Python 软件基金会发布) 条款的规定下,重新发布,且/或修改它们。在 附录 I, Python license 中包含了此协议的一份拷贝。

本译本由 Zoom.Quiet 负责项目管理。感谢啄木鸟社区提供 SVN 项目空间Wiki 协作空间

本译本由 啄木鸟/CPUG 的 obp 团队完成。可以在修订历史中找到一个翻译和修订人员的清单。如果您对当前版本的 Dive Into Python 中文版有任何意见和建议,可以到本书的 Wiki 协作空间中留下你的评论。

本译文遵守 GFDL 的规定。你可以复制、发行、修改此文档,但请保留此版权信息。

目录

第 1 章 安装 Python

欢迎来到 Python 世界,让我们开始吧。在本章中,将学习适合您的 Python 安装。

1.1. 哪一种 Python 适合您?

学习 Python 的第一件事就是安装,不是吗?

如果您在公网的服务器上有个用户账号,那么您的 ISP 或许已经安装了 Python。 大多数 Linux 发行版在默认安装的情况下就已经提供了 Python。 虽然您可能希望在苹果机上安装一个拥有类 Mac 的图形操作界面,但在 Mac OS X 10.2 或更高的版本上已经包含了一个 Python 的命令行版本。

Windows 环境默认不提供任何版本的 Python,但是不要担心!本章将提供几种 Windows 环境下安装 Python 的方法。

正像您所看到的,Python 可以运行于很多操作系统平台。包括 Windows、Mac OSMac OS X、所有免费的类 UNIX 变种 (如 Linux)。也有运行于 Sun Solaris、AS/400、Amiga、OS/2、BeOS 的版本,甚至是您从来没听说过的其他操作系统平台。

有太多的平台可以运行 Python 了。在一种平台下编写的 Python 程序稍作修改,就可以运行于任何 其他支持的平台。例如,我通常在 Windows 平台上开发 Python 程序,然后适当配置后使之能在 Linux 平台上运行。

回到开始的问题,“哪一种 Python 适合您?” 回答是:哪一个已经安装在您计算机上均可。

1.2. Windows 上的 Python

在 Windows 上,安装 Python 有两种选择。

ActiveState 制作的 ActivePython 是专门针对 Windows 的 Python 套件,它包含了一个完整的 Python 发布、一个适用于 Python 编程的 IDE 以及一些 Python 的 Windows 扩展,提供了全部的访问 Windows APIs 的服务,以及 Windows 注册表的注册信息。

虽然 ActivePython 不是开源软件,但它可以自由下载。ActivePython 是我学习 Python 时使用过的 IDE。除非有别的原因,我建议您使用它。可能的一个原因是:ActiveState 通常要在新的 Python 版本发布几个月以后才更新它的安装程序。如果您就需要 Python 的最新版本,并且 ActivePython 仍然落后于最新版本的话,您应该直接跳到在 Windows 上安装 Python 的第二种选项。

第二种选择是使用由 Python 发布的 “官方Python 安装程序。她是可自由下载的开源软件,并且您总是可以获得当前 Python 的最新版本。

过程 1.1. 选项 1:安装 ActivePython

下面描述 ActivePython 的安装过程:

  1. http://www.activestate.com/Products/ActivePython/ 下载 ActivePython

  2. 如果您正在使用 Windows 95、Windows 98 或 Windows ME,还需要在安装 ActivePython 之前下载并安装Windows Installer 2.0

  3. 双击安装程序 ActivePython-2.2.2-224-win32-ix86.msi

  4. 按照安装程序的提示信息一步步地执行。

  5. 如果磁盘空间不足,您可以执行定制安装,不选文档,但是笔者不建议您这样做,除非您实在是挤不出14M空间来。

  6. 在安装完后之后,关闭安装程序,打开 开始->程序->ActiveState ActivePython 2.2->PythonWin IDE。您将看到类似如下的信息:

PythonWin 2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond (mhammond@skippinet.com.au) -
see 'Help/About PythonWin' for further copyright information.
>>> 

过程 1.2. 选项 2:安装来自 Python.orgPython

  1. http://www.python.org/ftp/python/ 选择最新的 Python Windows 安装程序,下载 .exe 安装文件。

  2. 双击安装程序 Python-2.xxx.yyy.exe。文件名依赖于您所下载的 Python 安装程序文件。

  3. 按照安装程序的提示信息一步步地执行。

  4. 如果磁盘空间不足,可以取消 HTMLHelp 文件、实用脚本 (Tools/)、和/或测试套件 (Lib/test/)。

  5. 如果您没有机器的管理员权限,您可以选择 Advanced Options,然后选择 Non-Admin Install。这只会对登记注册表和开始菜单中创建的快捷方式有影响。

  6. 在安装完成之后,关闭安装程序,打开 开始->程序->Python 2.3->IDLE (Python GUI)。您将看到类似如下的信息:

Python 2.3.2 (#49, Oct  2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************
    
IDLE 1.0
>>> 

1.3. Mac OS X 上的 Python

Mac OS X 上,对于安装 Python 有两种选择:安装或不安装。您可能想要安装它。

Mac OS X 10.2 及其后续版本已经预装了一个 Python 的命令行版本。如果您习惯使用命令行,那么您可以使用它学完本书的三分之一。然而,预安装的版本不带 XML 解析器,所以当您学到 XML 的章节时,您会需要安装完整版。

您还可以安装优于预装版本的最新的包含图形界面 Shell 的完整版本。

过程 1.3. 在 Mac OS X 上运行预装版本的 Python

使用预装的 Python 版本的步骤:

  1. 打开 /Applications 文件夹。

  2. 打开 Utilities 文件夹。

  3. 双击 Terminal 打开一个终端进入命令行窗口。

  4. 在提示符下键入 python

试验:

Welcome to Darwin!
[localhost:~] you% python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to get back to the command prompt]
[localhost:~] you% 

过程 1.4. 在 Mac OS X 上安装最新版的 Python

下面介绍下载并安装 Python 最新版本的过程:

  1. http://homepages.cwi.nl/~jack/macpython/download.html 下载 MacPython-OSX 磁盘镜像 。

  2. 下载完毕,双击 MacPython-OSX-2.3-1.dmg 将磁盘镜像挂载到桌面。

  3. 双击安装程序 MacPython-OSX.pkg.

  4. 安装程序将提示要求您的管理员用户名和口令。

  5. 按照安装程序的提示一步步执行。

  6. 安装完毕后,关闭安装程序,打开 /Applications 文件夹。

  7. 打开 MacPython-2.3 文件夹。

  8. 双击 PythonIDE 来运行 Python

MacPython IDE 将显示一个弹出屏幕界面将您带进交互 shell。如果交互shell没有出现,选择 Window->Python Interactive (Cmd-0)。您将看到类似如下的信息:

Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)]
Type "copyright", "credits" or "license" for more information.
MacPython IDE 1.0.1
>>> 

请注意,安装完最新版本后,预装版本仍然存在。如果您从命令行运行脚本,那您需要知道正在使用的是哪一个版本的 Python

例 1.1. 两个 Python 版本

[localhost:~] you% python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to get back to the command prompt]
[localhost:~] you% /usr/local/bin/python
Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)] on darwin
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to get back to the command prompt]
[localhost:~] you% 

1.4. Mac OS 9 上的 Python

Mac OS 9 上没有预装任何版本的 Python,安装相对简单,只有一种选择。

下面介绍在 Mac OS 9 上安装 Python 的过程:

  1. http://homepages.cwi.nl/~jack/macpython/download.html 下载 MacPython23full.bin

  2. 如果浏览器不能自动解压文件,那么双击 MacPython23full.binStuffit Expander 解压。

  3. 双击安装程序 MacPython23full

  4. 按照安装程序的提示一步步执行。

  5. 安装完毕后,关闭安装程序,打开 /Applications 文件夹。

  6. 打开 MacPython-OS9 2.3 文件夹。

  7. 双击 PythonIDE 来运行 Python

MacPython IDE 将显示一个弹出屏幕界面将您带进交互 shell。如果交互shell没有出现,选择 Window->Python Interactive (Cmd-0)。您将看到类似如下的信息:

Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)]
Type "copyright", "credits" or "license" for more information.
MacPython IDE 1.0.1
>>> 

1.5. RedHat Linux 上的 Python

在类 UNIX 的操作系统 (如 Linux) 上安装二进制包很容易。预编译好的二进制包对大多数 Linux 发行版是可用的。或者您可以通过源码进行编译。

http://www.python.org/ftp/python/ 选择列出的最新的版本号, 然后选择 其中的rpms/ 目录下载最新的 Python RPM 包。 使用 rpm 命令进行安装,操作如下所示:

例 1.2. 在 RedHat Linux 9 上安装

localhost:~$ su -
Password: [enter your root password]
[root@localhost root]# wget http://python.org/ftp/python/2.3/rpms/redhat-9/python2.3-2.3-5pydotorg.i386.rpm
Resolving python.org... done.
Connecting to python.org[194.109.137.226]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7,495,111 [application/octet-stream]
...
[root@localhost root]# rpm -Uvh python2.3-2.3-5pydotorg.i386.rpm
Preparing...                ########################################### [100%]
   1:python2.3              ########################################### [100%]
[root@localhost root]# python          1
Python 2.2.2 (#1, Feb 24 2003, 19:13:11)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-4)] on linux2
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to exit]
[root@localhost root]# python2.3       2
Python 2.3 (#1, Sep 12 2003, 10:53:56)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-5)] on linux2
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to exit]
[root@localhost root]# which python2.3 3
/usr/bin/python2.3
1 仅仅键入 python 运行的是老版本的 Python ――它是缺省安装的版本。它不是我们想要的。
2 截止到笔者写作时,新的版本是 python2.3。您可能会需要修改示例脚本的第一行的路径指向新版本。
3 这是我们刚安装的 Python 新版本的全路径。在 #! 行中 (每个脚本的第一行) 使用它来确保脚本运行在最新版的 Python 下,并且确保敲入的是 python2.3 进入交互shell。

1.6. Debian GNU/Linux 上的 Python

如果您运行在 Debian GNU/Linux 上,安装 Python 需要使用 apt 命令。

例 1.3. 在 Debian GNU/Linux 上安装

localhost:~$ su -
Password: [enter your root password]
localhost:~# apt-get install python
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  python2.3
Suggested packages:
  python-tk python2.3-doc
The following NEW packages will be installed:
  python python2.3
0 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
Need to get 0B/2880kB of archives.
After unpacking 9351kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Selecting previously deselected package python2.3.
(Reading database ... 22848 files and directories currently installed.)
Unpacking python2.3 (from .../python2.3_2.3.1-1_i386.deb) ...
Selecting previously deselected package python.
Unpacking python (from .../python_2.3.1-1_all.deb) ...
Setting up python (2.3.1-1) ...
Setting up python2.3 (2.3.1-1) ...
Compiling python modules in /usr/lib/python2.3 ...
Compiling optimized python modules in /usr/lib/python2.3 ...
localhost:~# exit
logout
localhost:~$ python
Python 2.3.1 (#2, Sep 24 2003, 11:39:14)
[GCC 3.3.2 20030908 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [press Ctrl+D to exit]

1.7. 从源代码安装 Python

如果您宁愿从源码创建,可以从 http://www.python.org/ftp/python/下载 Python 的源代码。选择最新的版本,下载.tgz 文件,执行通常的 configure, make, make install 步骤。

例 1.4. 从源代码安装

localhost:~$ su -
Password: [enter your root password]
localhost:~# wget http://www.python.org/ftp/python/2.3/Python-2.3.tgz
Resolving www.python.org... done.
Connecting to www.python.org[194.109.137.226]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8,436,880 [application/x-tar]
...
localhost:~# tar xfz Python-2.3.tgz
localhost:~# cd Python-2.3
localhost:~/Python-2.3# ./configure
checking MACHDEP... linux2
checking EXTRAPLATDIR...
checking for --without-gcc... no
...
localhost:~/Python-2.3# make
gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Modules/python.o Modules/python.c
gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Parser/acceler.o Parser/acceler.c
gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Parser/grammar1.o Parser/grammar1.c
...
localhost:~/Python-2.3# make install
/usr/bin/install -c python /usr/local/bin/python2.3
...
localhost:~/Python-2.3# exit
logout
localhost:~$ which python
/usr/local/bin/python
localhost:~$ python
Python 2.3.1 (#2, Sep 24 2003, 11:39:14)
[GCC 3.3.2 20030908 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [press Ctrl+D to get back to the command prompt]
localhost:~$ 

1.8. 使用 Python 的交互 Shell

既然我们已经安装了 Python,那么我们运行的这个交互shell是什么东西呢?

Python 扮演着两种角色。首先它是一个脚本解释器,可以从命令行运行脚本,也可以在脚本上双击,像运行其他应用程序一样。它还是一个交互 shell,可以执行任意的语句和表达式。这一点对调试、快速组建和测试相当有用。我甚至知道一些人把 Python 的交互 shell 当作计算器来使用!

在您的计算机平台上启动 Python 的交互 shell,接下来让我们尝试着做些操作:

例 1.5. 初次使用交互 Shell

>>> 1 + 1               1
2
>>> print 'hello world' 2
hello world
>>> x = 1               3
>>> y = 2
>>> x + y
3
1 Python 的交互 shell 可以计算任意的 Python 表达式,包括任何基本的数学表达式。
2 交互 shell 可以执行任意的 Python 语句,包括 print 语句。
3 也可以给变量赋值,并且变量值在 shell 打开时一直有效 (一旦关毕交互 Sheel,变量值将丢失)。

1.9. 小结

您现在应该已经安装了一个可以工作的 Python 版本了。

根据您的运行平台,您可能安装有不止一个 Python 版本。那样的话,您需要知道 Python 的路径。若在命令行简单地键入 python 没有运行您想使用的 Python 版本,则需要输入想要的版本的全路径。

最后祝贺您,欢迎来到 Python 世界。

第 2 章 第一个 Python 程序

大家都很清楚,其他书籍是如何一步步从编程基础讲述到构建完整的可运行程序的,但还是让我们跳过这个部分吧!

2.1. 概览

这是一个完整的、可执行的 Python 程序。

它可能对您来说根本无法理解。别着急,我们将逐行地进行剖析。不过首先把代码通读一遍,看一看是否有些可以理解的内容。

例 2.1. odbchelper.py

如果您还没有下载本书附带的样例程序, 可以 下载本程序和其他样例程序

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)

现在运行一下这个程序,看一看结果是什么。

提示
在 Windows 的 ActivePython IDE 中,可以选择 File->Run... (Ctrl-R) 来运行 Python 程序。输出结果将显示在交互窗口中。
提示
Mac OSPython IDE 中,可以选择 Python->Run window... (Cmd-R) 来运行 Python 程序,但首先要设置一个重要的选项。在 IDE 中打开 .py 模块,点击窗口右上角的黑色三角,弹出这个模块的选项菜单,然后将 Run as __main__ 选中。 这个设置是同模块一同保存的,所以对于每个模块您都需要这样做。
提示
UNIX 兼容的操作系统中 (包括 Mac OS X),可以通过命令行:python odbchelper.py 运行模块。

odbchelper.py 的输出结果:

server=mpilgrim;uid=sa;database=master;pwd=secret

2.2. 函数声明

与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件;或者像 Pascal 一样的分离的 interface/implementation 段。在需要函数时,像下面这样声明即可:

def buildConnectionString(params):

首先,函数声明以关键字 def 开始,接着为函数名,再往后为参数,参数放在小括号里。多个参数之间 (这里没有演示)用逗号分隔。

其次,函数没有定义返回的数据类型。Python 不需要指定返回值的数据类型;甚至不需要指定是否有返回值。实际上,每个 Python 函数都返回一个值;如果函数执行过 return 语句,它将返回指定的值,否则将返回 None (Python 的空值)。

注意
Visual Basic 中,函数 (有返回值) 以 function 开始,而子程序 (无返回值) 以 sub 开始。在 Python 中没有子程序。只有函数,所有的函数都有返回值 (尽管可能为 None),并且所有的函数都以 def 开始。

最后需要指出的是,在 Python 中参数,params 不需要指定数据类型。Python 会判定一个变量是什么类型,并在内部将其记录下来。

注意
JavaC++ 和其他静态类型语言中,必须要指定函数返回值和每个函数参数的数据类型。在 Python 中,永远也不需要明确指定任何东西的数据类型。Python 会根据赋给它的值在内部将其数据类型记录下来。

2.2.1. Python 和其他编程语言数据类型的比较

一位博学的读者发给我 Python 如何与其它编程语言的比较的解释:

静态类型语言
一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。JavaC 是静态类型语言。
动态类型语言
一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScriptPython 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言
一种总是强制类型定义的语言。JavaPython 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言
一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。

所以说 Python 既是动态类型语言 (因为它不使用显示数据类型声明),又是强类型语言 (因为只要一个变量获得了一个数据类型,它实际上就一直是这个类型了)。

2.3. 文档化函数

可以通过给出一个 doc string (文档字符串) 来文档化一个 Python 函数。

例 2.2. 定义 buildConnectionString 函数的 doc string

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""

三重引号表示一个多行字符串。在开始与结束引号间的所有东西都被视为单个字符串的一部分,包括硬回车和其它的引号字符。您可以在任何地方使用它们,但是您可能会发现,它们经常被用于定义 doc string

注意
三重引号也是一种定义既包含单引号又包含双引号的字符串的简单方法,就像 Perl 中的 qq/.../

在三重引号中的任何东西都是这个函数的 doc string,它们用来说明函数可以做什么。如果存在 doc string,它必须是一个函数要定义的第一个内容 (也就是说,在冒号后面的第一个内容)。在技术上不要求给出函数的 doc string,但是您应该这样做。我相信在您上过的每一种编程课上都听到过这一点,但是 Python 带给您一些额外的动机:doc string 在运行时可作为函数的属性。

注意
许多 Python IDE 使用 doc string 来提供上下文敏感的文档信息,所以当键入一个函数名时,它的 doc string 显示为一个工具提示。这一点可以说非常有用,但是它的好坏取决于您书写的 doc string 的好坏。

进一步阅读

2.4. 万物皆对象

也许您没在意,我刚才的意思是 Python 函数有属性,并且这些属性在运行时是可用的。

Python 中,函数同其它东西一样也是对象。

打开您习惯使用的 Python IDE 执行如下的操作:

例 2.3. 访问 buildConnectionString 函数的 doc string

>>> import odbchelper                              1
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> print odbchelper.buildConnectionString(params) 2
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__ 3
Build a connection string from a dictionary

Returns string.
1 第一行将 odbchelper 程序作为模块导入。模块是指一个可以交互使用,或者从另一 Python 程序访问的代码段。(您在 第 4 章 将会看到多模块 Python 程序的许多例子。) 只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能,您也可以在 IDE 中这样做。这是一个很重要的概念,在后面我们将谈得更多。
2 当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 buildConnectionString,而应该使用 odbchelper.buildConnectionString。如果您用过 Java 的类,对此应该不感到陌生。
3 访问函数的 __doc__ 属性不像您想象的那样是通过函数调用。
注意
Python 中的 import 就像 Perl 中的 requireimport 一个 Python 模块后,您就可以使用 module.function 来访问它的函数;require 一个 Perl 模块后,您就可以使用 module::function 来访问它的函数。

2.4.1. 模块导入的搜索路径

在我们继续之前,我想简要地提一下库的搜索路径。当导入一个模块时,Python 在几个地方进行搜索。明确地,它会对定义在 sys.path 中的目录逐个进行搜索。它只是一个list (列表),您可以容易地查看它或通过标准的list方法来修改它。(在本章的后面我们将学习更多关于list的知识。)

例 2.4. 模块导入的搜索路径

>>> import sys                 1
>>> sys.path                   2
['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2',
'/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages',
'/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle']
>>> sys                        3
<module 'sys' (built-in)>
>>> sys.path.append('/my/new/path') 4
1 导入 sys 模块,使得它的所有函数和属性都有效。
2 sys.path 是一个指定当前搜索路径的目录列表。(您的输出结果可能有所不同,这取决于您的操作系统、正在运行的 Python 版本和初始安装的位置。)Python 将搜索这些目录 (按顺序) 来查找一个与您正试着导入的模块名相匹配的 .py 文件。
3 实际上,我没说实话。真实情况要比这更复杂,因为不是所有的模块都保存为 .py 文件。有一些模块 (像 sys),是“内置模块”,它们实际上是置于 Python 内部的。内置模块的行为如同一般的模块,但是它们的 Python 源代码是不可用的,因为它们不是用 Python 写的!(sys 模块是用 C 写的。)
4 在运行时,通过向 sys.path 追加目录名,就可以在 Python 的搜索路径中增加新的目录,然后当您导入模块时,Python 也会在那个目录中进行搜索。这个作用在 Python 运行时一直生效。(在 第 3 章 我们将讨论更多的关于 append 和其它的 list 方法。)
<