1.3.3 程序的执行方式

像上面 HelloWorld 程序所演示的那样,在 Python 解释器提示符>>>下输入语句并执行的 方式称为交互执行方式。

交互执行方式对执行单条语句来说是合适的,但是如果一个程序只有一条语句,那这个 程序肯定做不了什么大事。有用的程序都是由很多条语句组成的,而由很多条语句组成的程 序是不适合以交互方式执行的。例如,如果我们想让计算机在屏幕上连续显示三句问候语, 在交互方式下必然是这样的:

>>> print "Hello, Lucy."
Hello, Lucy.
>>> print "How are you?"
How are you?
>>> print "Goodbye, Lucy."
Goodbye, Lucy.

以上交互执行的结果明显不能令人满意,因为语句是每输入一条就执行一条,导致我们 希望连续显示的三句问候语被输入的程序语句分隔开了。

交互执行方式还有一个更严重的不足之处是:程序没有保存,语句一旦执行完就丢弃了, 因此无法多次执行一个程序。还是拿上面的例子来说,当用户想再次显示那三句问候语,他 就不得不重新输入所有语句。

为了解决上述问题,我们可以先将程序语句输入并保存在一个文件中,然后再“成批” 地执行程序文件中的所有语句。稍后的程序 1.2 给出了连续显示三句问候语的程序文件,执 行该程序文件即能看到连续显示的三句问候语,更重要的是该程序文件是“一次编写、永久 保存、多次执行”的。

Python 程序文件及其执行方式

将程序语句保存在一个扩展名为.py 的文本文件中,这种程序文件称为模块(module)。 还是以我们的第一个程序 HelloWorld 为例,先运行任何一种文本编辑器(如 Windows

的记事本①)新建一个文件,在文件中输入语句 print "Hello, World!" ,然后将文件 保存为 hello.py,这样就创建了一个 Python 程序文件(即模块):

【程序 1.1】hello.py

print "Hello, World!"

接下来的问题是:如何执行模块文件 hello.py?在 Windows + Python 的平台上,我们有 多种可选择的方式。第一种方式是在 Windows 的命令提示符②下直接用 Python 解释器(即python.exe 文件)执行该程序: C:\Python27> python hello.py Hello, World!

① 用 Word 之类的编辑器也可以,但要注意保存时必须选择纯文本格式。

② 俗称 DOS 界面。

效果如图 1.6(a)所示。

第二种方式是在 Python 解释器(命令行或 GUI)环境的提示符下执行 import 语句来“导 入”程序文件,该语句的作用是将 Python 模块从磁盘加载到内存中,在加载的同时执行模块 的每一条语句,就如在解释器环境下手工输入语句一样。具体语句形式如下:

>>> import hello
Hello, World!

效果如图 1.6(b)所示。注意,与第一种方式不同的是,模块文件名中不带扩展名“.py”, 因为 Python 自动假设模块具有“.py”扩展名。

(a)

(b)

图 1.6 Python 程序文件的执行方式

顺便说一下,第一次导入模块文件时,Python 会创建一个文件名相同但扩展名为.pyc 的 文件(本例中就是 hello.pyc),这是被 Python 解释器使用的一个中间文件——字节码文件。 Python 语言的翻译采用的是编译、解释混合方式:模块文件中的 Python 源程序首先被编译成 较低级的字节码指令,然后再解释执行这些字节码指令。如果已经生成了.pyc 文件,以后再 导入相应的模块时速度就会更快,因为无需再次编译。反之,如果为了节省存储空间而删 去.pyc 文件,下次导入模块时就需要重新编译。

第三种执行方式是直接在 Windows 文件夹中找到程序文件 hello.py,然后双击文件图标。 在时,Windows 系统首先打开一个 Python 解释器的命令行窗口(类似图 1.6(b)),然后执行 该程序,执行结束后 Windows 自动关闭命令行窗口。这种方式最简单直接,但它有一个让新 手困惑的小问题:由于程序执行的非常快,用户可能还没看清发生了什么,窗口就关闭了。 这个问题用一个小技巧就可以解决:在程序的最后放一条输入语句,该输入语句能让程序执 行完前面的语句后停顿下来等待用户输入,用户便有时间看清程序此前的运行结果。输入语 句的具体用法见第 2 章。

第四种方式是先在 IDLE 中打开(或者新建)程序文件 hello.py,具体打开方法可以利用 IDLE 菜单栏上的 File/Open...菜单项,也可以通过右键点击 hello.py 文件图标并选择“Edit with IDLE”菜单项。打开文件后进入 IDLE 自带的程序开发环境①窗口,在此窗口中选择 Run 菜 单中的 Run Module 命令(或直接按 F5 键)即可执行程序。注意程序的执行结果是显示在 Python 解释器提示符窗口中的。

① 程序开发环境是专为程序员使用某种语言编程而设计的系统,在其中可以方便地编辑、存储、执行、调试 程序。很多语言都有流行的集成开发环境(IDE)可用。IDLE 是标准的 Python 开发环境。

下面我们将前面提到的连续显示三条问候信息的程序保存到文件中:

【程序 1.2】eg1_2.py

print "Hello, Lucy." 
print "How are you?" 
print "Goodbye, Lucy."

如果以上述第四种方式来执行 eg1_2.py,会得到如图 1.7 所示的结果。从图中可见,显示的信息如我们所愿是连续的三句话。

图 1.7 在 IDLE 中执行程序 1.2

在本书中,我们主要用两种方式来执行语句或程序。

当介绍 Python 语言的有关语句时,我们经常在 Python 解释器环境的提示符下以交互方 式逐条执行语句,因为这对特定内容的讲解和演示非常方便。作为标志,凡是用交互方式执 行的程序语句,我们都在语句前附上提示符“>>>”(注意:提示符不是程序的一部分!)。

当我们编写较大的完整程序时,一般都将程序保存为文件,然后再以前述任何方式来执 行该程序文件。为便于交叉引用,对于完整的程序文件,本书都会像程序 1.1 和程序 1.2 那样 专门编号,并给出程序文件名。

不管用交互方式还是批方式,强烈建议读者在阅读本书时亲自输入并执行这些语句或程 序。另外,建议读者使用 IDLE 的程序开发环境,因为 IDLE 是图形界面的环境,提供自动 缩进、用颜色区分语言成分等特性,能方便而高效地编辑、执行和调试程序。

Python 搜索路径 还有个问题是关于程序文件保存位置的。在前面提到的程序文件的第一、第二种执行方式下,我们实际上假设了

C:\Python27> python hello.py

>>> import hello

这两条命令都能找到要执行的程序文件 hello.py。事实上,如果我们将 hello.py 保存在 Python的安装目录 C:\Python27 之下,那这两条命令都能成功执行程序 hello.py。 但作为一种好的习惯,不应该将用户文件和系统文件混放在一起,因此我们通常都将自己的程序文件如 hello.py 保存在自己的目录中。这时如果还像上面两条命令这样通过文件名 来找程序文件,则要么 Windows 会报错说找不到指定文件,要么 Python 解释器会报错说找 不到指定模块。对此,一种解决方法是在文件名前面加上绝对路径,以告知系统该文件保存 在哪里,例如假设 D:\myPython 是我们保存程序文件的目录,则可以像下面这样执行程序:

C:\Python27> python D:\myPython\hello.py

或者

>>> import D:\myPython\hello

另一种更方便的做法是预先将 D:\myPython 添加到 Python 的搜索路径中,使系统仅根据 文件名就能找到程序文件。具体做法是,先用任何文本编辑器建立一个文本文件,其内容是 要添加的目录路径,例如:

D:\myPython

然后保存为扩展名为.pth 的文件,如“mypath.pth”,最后将这个文件复制到安装目录下的指 定子目录 C:\Python27\Lib\site-packages 中。

如果是以第三、第四种方式来执行程序文件,系统总是在当前工作目录中找文件,一般 不会出现找不到文件的问题。