讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 2.2 名字 >

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\" 上。你仍然有兩個不同的名字(兩個標籤),不過,現在它們分別貼在兩個不同的東西上,而不再貼在同一個東西上了。