1.1. 資料類型 (data types)
Python內建的資料類型有列幾種:
- 布林:True 或 False (又稱為真或假)
- 整數:42
- 浮點數:42.0,即有小數點的數字。
- 字串:'42',一串文字字元,其前後被單引號「'」或雙引號「"」包住。
在Python中,所有的「東西」都被稱作一個「物件」,例如:整數42是一個物件,且它的類型是整數(int)。要如何知道一個東西(或物件)的類型是什麼,可以使用Python內建函數 type() 來得知。
>>> type(True)
<class 'bool'>
>>> type(42)
<class 'int'>
>>> type(42.0)
<class 'float'>
>>> type('42.0')
<class 'str'>
定義一個變數
在Python中如何定義一個變數與其資料類型,例如:x 是一個變數名稱,再透過「=」指派一個值給變數x (賦值)。
>>> x = 42
>>> x
42
>>> type(x)
<class 'int'>
>>> x = 42.0
>>> x
42.0
>>> type(x)
<class 'float'>
>>> x = '42.0'
>>> x
'42.0'
>>> type(x)
<class 'str'>
定義另一個變數y,指派變數x給變數y時:
>>> x = 42
>>> y = x
>>> y
42
>>> type(x)
<class 'int'>
>>> type(y)
<class 'int'>
這兩個變數的值都是整數42,但是它們同一個東西(或物件)嗎?
我們可以用Python中的關鍵字「is」來確認。
>>> x is y
True
所以這是什麼意思?
記憶體中的變數
我們用Python內建函數 id() 來看看變數 x 和 y 在電腦記憶體中的位址:
>>> id(x)
1673901840
>>> id(y)
1673901840
所以這到底是什麼意思?
當我們把一個整數42的值指派給變數 x,可以理解成在電腦記憶體中的某個地方儲存這個整數42的值,有一個變數x指向它。當我們把變數 x 指派給變數 y 時,則是把變數y 指向變數 x 所指向的值,即整數42。
如果再指派另一個值,整數2,給變數y,則表示變數 y 指向電腦記憶體中的另一個儲存值地方,其值為整數2。但是,我們再把整數42指派給變數y,則變數 y 又指向原本的整數42。
>>> y = 2
>>> id(y)
1673901776
>>> x is y
False
>>> y = 42
>>> id(y)
1673901840
所以,有可能變數 x 和變數 y 指向相同的「值」,但是卻儲存在記憶體中的不同位址嗎?
>>> x = 42.0
>>> y = 42.0
>>> id(x)
1609968
>>> id(y)
1609848
>>> x is y
False
>>> x == y
True
>>> x = '42.0'
>>> y = '42.0'
>>> id(x)
32702336
>>> id(y)
32700712
>>> x is y
False
>>> x == y
True
這個「==」什麼意思?
它表示變數 x 和變數 y 的值是不是相同,但是為什麼不是用「=」?因為「=」已經被用來指派一個值給一個變數了,所以用「==」來判斷兩個變數是否相同。
躍躍欲試
>>> x = True
>>> y = True
>>> id(x)
???
>>> id(y)
???
>>> x is y
???
>>> x == y
???
變數的命名規則
在Python中要定義一個變數名稱只能使用下列這些字元:
- 小寫字母 (a~z)
- 大寫字母 (A~Z)
- 數字 (0~9)
- 底線 (_)
但是,變數的第一個字元只能是大小寫母及底線,不能是數字。
>>> _x = 1
>>> _x
1
>>> 1x = 1
File "<stdin>", line 1
1x = 1
^
SyntaxError: invalid syntax
同時,變數名稱也不能是Python的保留字,這些保留字會是為Python語法一部份,如下: [Link]
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
'return', 'try', 'while', 'with', 'yield']
>>> class = 10
File "<stdin>", line 1
class = 10
^
SyntaxError: invalid syntax
為什麼 class 不能指派一個值,其值為整數10?
因為,class 被 type() 用來顯示Python物件的類型。
>>> x = 42
>>> type(42)
<class 'int'>
躍躍欲試2
>>> 8x = 10
???
>>> True = 10
???
>>> false = 10
???
多重指派
在Python中可以將多個值指派給多個變數,值跟變數的數量要相同。
>>> x = y = 1
>>> x
1
>>> y
1
>>> x, y = 2, 3
>>> x
2
>>> y
3
多重指派也可以用來將變數的值做交換!
>>> x, y = 2, 3
>>> temp = x
>>> x = y
>>> y = temp
>>> x
3
>>> y
2
>>> x, y = 2, 3
>>> x, y = y, x
>>> x
3
>>> y
2
資料類型轉換
在Python中可以做用內建函數,例如:int()、float()、str()等,來對不同的資料類型可以做轉換。
>>> x = True
>>> int(x)
1
>>> x = False
>>> int(x)
0
>>> x = 1.0
>>> int(x)
1
>>> x = 1.5
>>> int(x)
1
>>> x = '1'
>>> int(x)
1
>>> x = 1
>>> float(x)
1.0
>>> x = '1.5'
>>> float(x)
1.5
>>> x = 1
>>> str(x)
'1'
>>> x = 1.0
>>> str(x)
'1.0'
參考資料
- Python自動化的樂趣, 第一章, Al Sweigart 著、H&C 譯, 碁峰
- Python編程入門第3版(簡), 第二章, Toby Donaldson著, 人民郵電出版社
- 精通Python, 第二章, Bill Lubanovic著, 賴屹民譯, 歐萊禮