萬物終有歸屬 - 變數 =================== 我們對於日常生活中的事物,都會給予名字,我們並不會說 :: 把這個和那個東西拿過來 因為這樣很難確定這個和那個指的到底是什麼東西,因此明確的名稱是需要的,在電腦中的世界也是如此,例如你有兩台印表機,當你向電腦說 :: 請把這份文件於印表機印出 對於電腦來說,這份文件指的是哪一份? 而印表機指的又是哪一台? 如果換成 :: 請把文件1234.doc印到列表機一號 如此一來就相當明確,電腦能接受的只有明確的語言,因此名稱是必需的。 而電腦是一種可以進行運算的裝置,理所當然的需要儲存一些資料,就像我們在紙上做計算時,需要一些地方記下運算過程中的數字,而這就是所謂的變數,我們來看一個簡單的例子 .. code-block:: python num = 5566 num在此就是一個變數,而這個變數指向的是5566這個數字,用圖來表示 .. image:: _static/variable_assign.png 此後我們就可以用num這個名稱來取代5566,例如原本程式是這樣寫 .. code-block:: python print "I love", 5566 可以改寫成 .. code-block:: python num = 5566 print "I love", num 如此一來,如果哪一天你不喜歡5566這個數字,你喜歡7788,那麼你只要改寫成 .. code-block:: python num = 7788 print "I love", num 有沒有發現我們的print那一行的程式沒有改變,只改變了num,因為我們只要設定好了num的名稱,之後num名稱所放之處就代表了它所指派的東西,這就是變數帶來的彈性,接著我們就更詳細地介紹變數 變數 ---- 變數之所以為變數,正是因為它可以改變的特性,同樣的名稱我們可以讓它代表不同的東西,而指定一個變數要代表什麼,我們稱之為 "指派",也就是我們先前看到的 "=" 等號的形式,它的語法如下 :: 變數名稱 = 代表的對象 值得注意的是,這看起來很像數學的等式,很多人可能一開始會直覺地認為,這是 "左右相等" 的意思,但是在Python語言裡,或是常見的程式語言中,這都叫做 "指派",是設定變數代表對象的語法,和數學裡的等式是兩回事 就像我們先前提到的,變數是可以改變的,因此當你一開始指派了變數的代表對象之後,還可以再次改變它,我們來看一個簡單的例子 .. code-block:: python num = 7788 print "I love", num num = 5566 print "I hate", num 執行結果會是 :: I love 7788 I hate 5566 用圖來表示的話 .. image:: _static/variable_reassign.png 如我們這個例子所看到的,num這個變數一開始設定為7788,接著重新設為5566,這顯示了變數可以一直被改變的特性,而新手常犯的錯誤之一,就是弄不清楚執行的順序,舉個例子 .. code-block:: python print num num = 1234 你會得到一個錯誤的訊息 :: Traceback (most recent call last): File "", line 1, in 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 會被視為三種不一樣的變數,我們舉個例子 .. code-block:: python num = 1 Num = 2 nUm = 3 print num, Num, nUm 輸出的結果會是 :: 1 2 3