2.1.1 常量与变量

在程序中如何指明要处理的数据?所有编程语言都提供两种指明数据的方式:第一,直接用字面值(literal)表示数据,即从文本字面上即可看出是什么数据,这种数据是不会改 变的常量;第二,将数据存储在一个变量中,以后用该变量来指代数据。

回顾第 1 章中我们所写的第一个程序:

>>> print "Hello World!"

其中"Hello World!"就是以字面值的形式指明 print 命令要操作的数据。我们也可以这 样做:

>>> s = "Hello World!"
>>> print s
Hello World!

这里先将数据"Hello World!"存储在变量 s 当中,然后通过引用 s 来指明 print 要操 作的数据。

又如,3.1416 也是字面值,看到这串文本就知道它表示一个数值。我们可以直接处理 这个字面值,也可以将它存储在变量中并通过引用变量来指代此数值。

>>> print 3.1416
3.1416
>>> p = 3.1416
>>> print p
3.1416

字面值的意义是不可改变的,而变量的意义(即变量存储的值)是可以改变的。例如, 我们接着上面的语句继续操作数据 p:

>>> p = 2.71828
>>> print p
2.71828

这里我们将变量 p 的值改成了 2.71828,因此 p 所表示的数据被改变了。 在程序中直接使用字面值通常不是好的做法,因为这会导致程序缺乏一般性,即只适用

于特定计算。如果要将程序应用于其他数据的计算,则必须修改程序中的字面值,这是很不 方便的。显然,使用变量可以使程序具有一般性,因为只要为变量赋予不同的值,程序就可 以对不同数据进行处理。

变量只是一个“占位符”,必须用具体数据赋值后才有意义。正如我们已经多次见到的, 赋值语句的语法形式是:

<变量> = <表达式>

其中等号表示赋值,等号左边是一个变量,右边是一个表达式(由常量、变量和运算符构成)。 Python 首先对表达式进行求值,然后将结果存储到变量中。如果表达式无法求值,则赋值 语句出错。一个变量如果未赋值,则称该变量是“未定义的”。在程序中使用未定义的变量 会导致错误。例如:

>>> print q
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
print q
NameError: name 'q' is not defined

并行赋值

与许多编程语言不同,Python 语言允许同时对多个变量赋值,例如:

>>> x,y = 1,2
>>> x
1
>>> y
2

这种形式的赋值语句使得交换两个变量的值的任务变得轻而易举:

>>> x,y = y,x
>>> x
2
>>> y
1

而在其他编程语言中为了交换两个变量 x 和 y 的值,必须借助于一个临时变量,执行三 条赋值语句:

temp = x x = y
y = temp