萬物終有歸屬 - 變數

我們對於日常生活中的事物,都會給予名字,我們並不會說

把這個和那個東西拿過來

因為這樣很難確定這個和那個指的到底是什麼東西,因此明確的名稱是需要的,在電腦中的世界也是如此,例如你有兩台印表機,當你向電腦說

請把這份文件於印表機印出

對於電腦來說,這份文件指的是哪一份? 而印表機指的又是哪一台? 如果換成

請把文件1234.doc印到列表機一號

如此一來就相當明確,電腦能接受的只有明確的語言,因此名稱是必需的。

而電腦是一種可以進行運算的裝置,理所當然的需要儲存一些資料,就像我們在紙上做計算時,需要一些地方記下運算過程中的數字,而這就是所謂的變數,我們來看一個簡單的例子

num = 5566

num在此就是一個變數,而這個變數指向的是5566這個數字,用圖來表示

../_images/variable_assign.png

此後我們就可以用num這個名稱來取代5566,例如原本程式是這樣寫

print "I love", 5566

可以改寫成

num = 5566
print "I love", num

如此一來,如果哪一天你不喜歡5566這個數字,你喜歡7788,那麼你只要改寫成

num = 7788
print "I love", num

有沒有發現我們的print那一行的程式沒有改變,只改變了num,因為我們只要設定好了num的名稱,之後num名稱所放之處就代表了它所指派的東西,這就是變數帶來的彈性,接著我們就更詳細地介紹變數

變數

變數之所以為變數,正是因為它可以改變的特性,同樣的名稱我們可以讓它代表不同的東西,而指定一個變數要代表什麼,我們稱之為 「指派」,也就是我們先前看到的 「=」 等號的形式,它的語法如下

變數名稱 = 代表的對象

值得注意的是,這看起來很像數學的等式,很多人可能一開始會直覺地認為,這是 「左右相等」 的意思,但是在Python語言裡,或是常見的程式語言中,這都叫做 「指派」,是設定變數代表對象的語法,和數學裡的等式是兩回事

就像我們先前提到的,變數是可以改變的,因此當你一開始指派了變數的代表對象之後,還可以再次改變它,我們來看一個簡單的例子

num = 7788
print "I love", num
num = 5566
print "I hate", num

執行結果會是

I love 7788
I hate 5566

用圖來表示的話

../_images/variable_reassign.png

如我們這個例子所看到的,num這個變數一開始設定為7788,接著重新設為5566,這顯示了變數可以一直被改變的特性,而新手常犯的錯誤之一,就是弄不清楚執行的順序,舉個例子

print num
num = 1234

你會得到一個錯誤的訊息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'num' is not defined

這是什麼意思呢? 意思是Python不認識num,那你會說,我明明有指派,為什麼會不認識? 原因出在於程式的執行是由上而下的,也就是說將1234指派給num是在print下一行才發生的事,這就好像你搭時光機回到二十年前問路人Lady Ga Ga是誰一樣,沒有人認識她,因此請記得一個重點就是,程式是由上往下執行的

變數名稱

Python的變數名稱可以有大小寫英文字母、數字還有底線,例如

student_number
CreditCardNumber
__str__
__var
_var

這些都是合法的命名,以下示範一些非法的命名

student-number
$user_name
@my_var

一個很重要值得注意的地方是,Python的大小寫變數名稱是有差異的,例如

StudentNumber
studentNumber
studentnumber

會被視為三種不一樣的變數,我們舉個例子

num = 1
Num = 2
nUm = 3
print num, Num, nUm

輸出的結果會是

1 2 3