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著, 賴屹民譯, 歐萊禮

results matching ""

    No results matching ""