再回到 Python Shell 窗口。(如果完成第 1 章中的例子后关闭了 IDLE,现在要再打开它。)在提示符后面键入:
>>> Teacher = /"Mr. Morton/">>> print Teacher
(记住,>>> 是 Python 显示的提示符。你只需要键入它后面的内容,然后按回车。)你会看到下面的结果:
Mr. Morton>>>
你刚才创建了一个由字母 /"Mr. Morton/"
组成的东西,并且给它起了一个名字 Teacher
。
这里的等号(=)告诉 Python 要赋值(assign)或者“让……等于……”。这里把字母序列 /"Mr.Morton/"
赋值给名字 Teacher
。
在计算机内存中的某个位置,字母序列 /"Mr.Morton/"
已经存在。你不需要准确地知道它们到底在哪里。只需要告诉 Python 这个字母序列的名字是 Teacher
,从现在开始就要通过这个名字来引用这个字母序列。名字就像标签或者不干胶便条,你可以用它来标识一些东西。
在一个东西两边加上引号时,Python 会按字面来处理它。它会把引号里的内容原样打印出来。如果没有加引号,Python 就必须明确这个东西到底是什么。这可能是数字(如 5)、表达式(比如 5 + 3)或者名字(如 Teacher)。由于我们创建了名字 Teacher
,所以 Python 会打印这个名字里的内容,这正是字母序列 /"Mr. Morton/"
。
这就像有人在说,“请写下你的地址”,你肯定不会这样写(如下图):
(不过,也许卡特会这么干,因为他总是喜欢调皮捣蛋……)
你可能会这样写:
如果写成“你的地址”,就是在按字面看这句话。除非加上引号,否则 Python 不会按字面来处理。下面来看另一个例子:
>>> print /"53 + 28/"53 + 28>>> print 53 + 2881
有引号时,Python 会直接照你所说显示输出:53 + 28。
没有引号时,Python 把 53 + 28 处理为一个算术表达式,它会计算这个表达式。在这里,这是一个两数相加的表达式,所以 Python 会给出它们的和。
术语箱
算术表达式(arithmetic expression)是数字和符号的一个组合,Python 可以算出它的值。
计算(evaluate)就表示“算出……的值”。
Python 要确定需要多少内存来存储这些字母,以及要使用哪一部分内存。要获取信息(取回信息),只需要再使用同样的名字。我们使用 print
关键字并提供名字,这会在屏幕上显示具体的内容(如数字或文本)。
像程序员一样思考
把一个值赋给一个名字时(如把值“Mr. Morton”赋给 Teacher),它会存储在内存中,称为变量(variable)。在大多数编程语言中,都把这称为“把值存储(store)在变量中”。
不过 Python 与大多数其他计算机语言的做法稍有不同。它并不是把值存储在变量中,而更像是把名字放在值上。
有些 Python 程序员说,Python 没有“变量”,而是只有“名字”。不过其实它们的行为基本上是一样的。这是一本关于编程的书(只不过刚好使用了 Python),而不是专门讨论 Python 的。所以谈到 Python 名时,我们可能会交替使用变量(variable)、名字(name)或变量名(variable name)等不同的术语。实际上,只要你理解变量有什么表现以及在程序中如何使用变量,怎么称呼并不重要。
顺便说一句,Guido van Rossum(也就是创建 Python 的那个人)在他的 Python 教程中曾经这样讲:“‘=’符号用来将一个值赋给一个变量。”所以我猜他认为 Python 是有变量的!
一种简洁的存储方法
在 Python 中使用名字就像是干洗店给衣服加标签。你的衣服挂在晾衣架上,上面附着写有你的名字的标签,这些衣服都挂在一个巨大的旋转吊架上。你回来取衣服时,并不需要知道它们存放在这个大型吊架的具体哪个位置。只需要提供你的名字,干洗店的人就会把衣服交还给你。实际上,你的衣服可能并不在原先所放的位置。不过干洗店的人会为你记录衣服的位置。要取回你的衣服,只需要提供你的名字。
变量也一样。你不需要准确地知道信息存储在内存中的哪个位置。只需要记住存储变量时所用的名字,再使用这个名字就可以了。
除了字母,还可以为其他内容创建变量。可以给数值指定名字。你应该还记得前面的例子:
>>> 5 + 38
下面用变量来完成这个例子:
>>> First = 5>>> Second = 3>>> print First + Second8
在这里,我们创建了两个名字 First
和 Second
。数字 5
赋给 First
,数字 3
赋给 Second
。然后用 print
把这两个数的和打印出来。下面是完成这个例子的另一种做法。你可以试试看:
>>> Third = First + Second>>> Third8
注意这里的做法。在交互模式中,只需键入变量名就可以显示这个变量的值,而不必使用 print
。(不过程序中可不行。)
在这个例子中,并没有在 print
指令中求和,而是先取 First
的值和 Second
的值,将二者相加,创建一个新的值,名为 Third
。Third
是 First
和 Second
的和。
同一个东西可以有多个名字,可以在交互模式中试试这个指令:
>>> MyTeacher = /"Mrs. Goodyear/">>> YourTeacher = MyTeacher>>> MyTeacher/"Mrs. Goodyear/">>> YourTeacher/"Mrs. Goodyear/"
这就像在同一个东西上贴两个标签。一个标签写着 YourTeacher
,另一个标签写着 MyTeacher
,不过它们都贴在 /"Mrs. Goodyear/"
上。
卡特,这个问题问得好。答案是:不会。实际上,修改这个名字会创建一个新的值 /"Mrs.Tysick/"
。标签 MyTeacher
会从 /"Mrs.Goodyear/"
上撕掉,贴到 /"Mrs. Tysick/"
上。你仍然有两个不同的名字(两个标签),不过,现在它们分别贴在两个不同的东西上,而不再贴在同一个东西上了。