「使你陷入麻煩的,不是你不知道的,而是你以為知道,但其實不是這麼一回事的事情。」 -馬克‧吐溫
當你以為 Python 中的 =,跟你以前在學校上數學課時的 = 一樣時,你等同於在自己學 Python 的路上放上了一個大大的絆腳石。
Python 的觀念(concept)是你對這個程式語言的認知與看法,對於沒有學過程式語言的人來說,Python 就像是一堆數學符號跟英文字母亂碼,套用自己既有的認知來看待這些符號與字母們。
當你開始學 Python ,你會發現有些符號跟數學中的用法一樣,像是加、減、乘、除,都跟在數學中有一樣的功能。
+ 加
- 減
* 乘
/ 除
但你要留心,= 在 Python 世界中有不一樣的功能!
Python觀念:= 是賦值,不是等於
剛開始學 Python ,最容易混淆的就是 = 這個符號。Python 世界的 = 符號, 與數學世界的 = 有完全不同的含義。
就好像同樣是點頭,在台灣代表「好」,但在印度卻是表達「不好」,看起來一樣的動作,卻有不同的意思。
學習 Python的路途上,如果你不打算改變對 = 的既有觀念,那麼你的Python會學得很混亂。
Python 中的 = 符號,代表賦值,是將某一個值指派給你所設定的變數(variable),閱讀時你需要從右讀到左。
我們用下面這個例子再詳細說明 = 這個符號 :
>>> x = 1
說明:將1指派給 x, x 就是此處設定的變數。
>>> y = x + 2
說明:將 x + 2 指派給 y ,y 是設定的變數。
>>> y
說明:在互動式解譯器中會直接印出 y 的值。
3
說明:輸出 y 的值等於3。
知道 = 在 Python 中代表賦值後,你會不會有疑問:假如需要表示「等於」,該用什麼符號呢?
Python 中的等於以 = = 來表示,不等於以 ! = 表示。
因為 = 代表的是賦值,如此一來,下方這個程式碼的邏輯就通了。
>>> x = 1
>>> x = x + 1
2
上面這段程式碼是這樣運作的:
- 首先,將 1 指派給 x,此時 x 這個變數為 1。
- 接著,運算 x + 1,得出 2 。
( x = x + 1 可以省略一個x,寫成 x += 1。算是滿常會使用到的用法,可以留心記一下。) - 將 2 指派給 x,最後得出 2 這個值。
x = x +1 在數學世界中是不合邏輯的;但在 Python 的世界裡,卻是常見且合乎邏輯的用法。
變數是一個名稱
接續剛剛說的賦值,當你輸入 x = 1 ,代表將 1 指派給 x 這個變數(variable)。
變數又是什麼呢?
在 Python 的世界中,變數就是一個名稱。以前面所舉的例子來說,x 是一個變數,名稱叫做 x,而且 x 連結 1 這個值。
你可以將 x 這個變數的名字想像成一個標籤,這個標籤上有條繩子,連接到 1 這個值所放的盒子中。
就像下面這個圖這樣。
既然說變數是一個名稱,那就可以隨你來替它命名,只是有 4 條規則必須遵守:
- 只能使用英文字母大小寫、數字及底線符號 _,其他都不行。
空格、-、@、#、$等特殊符號都不行。 - 英文字母大小寫有區分,代表不一樣的變數。
例如Dog、 dog、 DOG是代表三個不一樣的名稱,也就是三個不同的變數。 - 不可以使用 Python 的保留字(將於下一段說明),這些字有它的功能,不能作為變數來使用。
- 開頭不可以是數字,換言之,就是變數開頭只能是英文字母或是底線;開頭使用底線的名稱會被特殊對待, 所以一般變數名稱開頭以英文字母居多。
除了上述一定要遵守的「天條」之外,還有一個很多過來人都會建議你的小提醒:為變數取一個有意義的名稱。你自己看得懂,別人也容易懂的名稱。
當你的變數只有一個時,記住它是一件簡單的事。
然而,當你的變數有 10 個或更多時,你會痛恨自己當初為何不好好取名字,害得你看到每一個變數,就像看到陌生人,認不得。
覺得變數還是很難懂嗎?觀看下方的影片幫助你認識變數。
保留字不可以作為變數名稱
Python 的保留字包括下方表格所列出的字詞,其中 True、False、None 這三個保留字的首個字母是大寫。
(如果你是以手機觀看保留字的表格,可以滑動表格最下方的卷軸,以完整觀看表格。)
False | await | else | import | pass |
None | break | except | in | raise |
True | class | finally | is | return |
and | continue | for | lambda | try |
as | def | from | nonlocal | while |
assert | del | global | not | with |
async | elif | if | or | yield |
編寫程式碼時,大寫字母與小寫字母是不同的,所以true、false、none 不是保留字。
又例如你要使用 print() 函式,若不小心將 p 打成大寫,Python會將 Print 視為一個變數,因為他不是函式。
謹記任何大小寫、符號都有它的用意,尤其大寫字母與小寫字母不可混用,也不可當成一樣的東西,否則你的程式碼必然錯誤連連。
每個保留字都有它的功能,不能拿來當成變數,不能指派各種值給它。
從0開始起算
Python 在算順序的時候,也與我們一般的用法不同。通常排在第 1 位的,我們就叫它第 1 個,但在Python 中,我們改叫它第 0 個,從 0 開始起算。
舉例來說,hello 這個單字的第一個字母是什麼?
一般的情況,我們會說是 h,但在 Python 的世界裡,卻是 e。
因為電腦中起始值(開始的那個數字)是 0,也就是說,第 0 個位置(index)才是 h,第 1 個位置則是e。
Python的資料都是物件
為何要說 Python 的資料都是物件?
你可以這麼理解:因為 Python 不是直接處理電腦記憶體的原始資料,而是在記憶體中,將各種資料值包裝成物件,好來跟原始資料做區隔。不然每個電腦裡的資料都叫做資料,你永遠也搞不懂到底是指什麼資料。
換句話說,Python 的每個物件都是一段資料,而每個物件都會至少包含以下 4 個元素:
- 型態(type):資料型別,定義這個物件可以做什麼。
- ID:這是一個唯一的值,就像人的身份證字號一樣,一個號碼只能對應到一個人。
- 值(value):必須要與型態一致,每個變數都會連結到一個值,例如布林這個型態的值就只能是 True 跟 False。
- 參考計數:追蹤這個物件被使用的頻率。
學習 Python 就是在學會怎麼去運用各種型態的物件,利用 Python 這個程式語言與電腦溝通,讓電腦按照我們的意思去幫我們做事情。
而各種型態都有各自的使用規則,基本的型態包括:
- 整數 (integer)
- 浮點數 (float)
- 布林 (boolean)
- 字串 (string)
- 串列 (list)
- 多元組 (tuple)
- 集合 (set)
- 字典 (dictionary)
下方的影片簡短的說明資料型態,幫助你了解及加深記憶。
資料型態是「值」的分類,每一個值都只會屬於一種資料型態。
區分這麼多種型態是有原因,因為 Python 需要定義及蒐集資料後,才能加以運用,所以對資料進行分類是有必要的。
如果你對於更多 Python觀念與知識有興趣,歡迎持續鎖定自學成功道。
希望透過閱讀書本加強Python的觀念嗎?推薦你《精通Python》這本書,這本書對於初學者容易搞混觀念有相當好的說明與教學,值得一讀。
延伸閱讀: