首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》2.2 名字

关灯直达底部

再回到 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  

在这里,我们创建了两个名字 FirstSecond。数字 5 赋给 First,数字 3 赋给 Second。然后用 print 把这两个数的和打印出来。下面是完成这个例子的另一种做法。你可以试试看:

>>> Third = First + Second>>> Third8  

注意这里的做法。在交互模式中,只需键入变量名就可以显示这个变量的值,而不必使用 print。(不过程序中可不行。)

在这个例子中,并没有在 print 指令中求和,而是先取 First 的值和 Second 的值,将二者相加,创建一个新的值,名为 ThirdThirdFirstSecond 的和。

同一个东西可以有多个名字,可以在交互模式中试试这个指令:

>>> MyTeacher = /"Mrs. Goodyear/">>> YourTeacher = MyTeacher>>> MyTeacher/"Mrs. Goodyear/">>> YourTeacher/"Mrs. Goodyear/"  

这就像在同一个东西上贴两个标签。一个标签写着 YourTeacher,另一个标签写着 MyTeacher,不过它们都贴在 /"Mrs. Goodyear/" 上。

卡特,这个问题问得好。答案是:不会。实际上,修改这个名字会创建一个新的值 /"Mrs.Tysick/"。标签 MyTeacher 会从 /"Mrs.Goodyear/" 上撕掉,贴到 /"Mrs. Tysick/" 上。你仍然有两个不同的名字(两个标签),不过,现在它们分别贴在两个不同的东西上,而不再贴在同一个东西上了。