還記得大一與大二所學過的程式語言有哪些嗎?不論是什麼程式語言,幾乎都逃不過 int、float、bool 等等的字眼,而這些字眼卻在許多地方可以派上用場,例如你要做加減乘除、抓資料或做判斷等,所以接下來我們就要介紹變數與資料型態之間的用途與關係。
*本文配合專題指導老師所推薦的「Python 變數與資料型態 By 彭彭」進行教學撰寫。
*本文以「W3Schools – Python Data Types」、「自學成功道」、「ccClub」等做為參考資料。
變數
變數指的是用來存放資料的自訂名稱,就像是你新增一個 Word 檔案,需要幫他取檔案名稱一樣,這個檔案名稱是可以自訂的,但每個程式通常都有保留字,若是使用到保留字很可能會出現錯誤。
請記得,身為一個良好的程式設計師,你需要為變數取一個合適且合理的名稱。
資料值(Value)
資料值是程式中的基本項目之一,例如在上篇的教學中,我們印出了字串「Hello world」,或是數字「123」就屬於資料值中的數值。
資料型別 (Data type)
不同的值屬於不同的資料型態,同時也可以做到不同的事情,先帶你來看看 Python 的資料型別:
數值型別(Numeric Types): 整數(int)、浮點數(float)、長整數(complex)
字串型別(Text Type): 字串(str)
布林型別(Boolean Type):布林值(bool)
序列型別(Sequence Types):可變列表(list)、固定列表(tuple)
(註:因轉換為整數列表(map)及製作整數列表(range)在 Python 3 版本就被改為迭代(Iteration),故在此文章中不做教學。)
字典型別(Mapping Type):字典(Dictionary)
集合型別(Set Types):集合(set)、凍結集合(frozenset)
二進制型別(Binary Types): 位元組(bytes)、位元陣列(bytearray)、記憶體檢視(memoryview)
數值型別(Numeric Types)
整數(int):不含真分數或無理數的數,包括零、自然數與帶負號的自然數,例如以下數字:
0
12
123
浮點數(float):我們又稱為小數,他的儲存空間比整數來的更大,可儲存含有小數點的實數,例如以下數字:
1.134
3.59
40.57
字串型別(Text Type)
字串(str):指的是字元序列,包含了中文、英文、數字、空格、符號等,可運用單引號、雙引號、三重引號(三個單引號、三個雙引號)來框住字元,例如以下文字:
'Hello,Taipei!'
"Hello,Taipei!"
'''Hello,Taipei!'''
"""Hello,Taipei!"""
布林型別(Boolean Type)
布林值(bool):用來判斷真(True)或假(False),就像是電路中通電代表1,不通電代表0,在程式裡面表達只需要用True或False即可,例如以下程式碼:
True False
序列型別(Sequence Types)
可變列表(list):用來儲存一連串有順序性的資料值(Value),具有可變性,以中括號([])框起來,並於中括號內以逗號(,)來進行分隔,例如以下程式碼:
[1,2,3]
['Hello','yuhao.tw']
["你好","yuhao.tw"]
固定列表(tuple):用來儲存一連串有順序性的資料值(Value),具有不可變性,也就是你不可以修改 tuple 裡面的任何資料值,以小括號(())框起來,並於小括號內以逗號(,)來進行分隔,例如以下程式碼:(提醒:tuple 在新增只有一個資料值時,需要加上逗號,否則無法運作。)
(1,)
(1,2)
(1,2,3)
字典型別(Mapping Type)
字典(Dictionary):由鍵(key)和資料值(Value)組成,用來儲存複雜的資料,以大括號({})框起來,並於大括號內以逗號(,)來進行分隔,若有多個資料值可用字串寫法框起來,例如以下程式碼:(推薦觀看:「Python 初學第九講 — 字典」)
{"apple":"ios","Google":"Android"}
{"臺北市":["北投區","信義區","中正區","大安區","文山區"]}
集合型別(Set Types)
集合(set):由鍵(key)組成,具有不重複資料的特性,通常可以用來去除重複的資料,亦或是判斷資料值是否有交集、聯集等,以小括號(())或大括號({})框起來,可以是空集合(set()),若有多個資料值可用字串寫法框起來,例如以下程式碼:
set() ->
set([0,1,2,3,3,1,0]) -> 0,1,2,3
set({'x':1,'y':2,'z':3}) -> x,y,z
set('taipei') -> t,a,i,p,e
凍結集合(frozenset):由鍵(key)組成,與集合(set)相似,具有不重複資料與不可變特性,因集合(set)中的資料值必須為不可變類型,故可以透過凍結集合(frozenset)來放入集合(set)中,以小括號(())或大括號({})框起來,可以是空集合(set()),若有多個資料值可用字串寫法框起來,例如以下程式碼:
frozenset() ->
frozenset([0,1,2,3,3,1,0]) -> 0,1,2,3
frozenset({'x':1,'y':2,'z':3}) -> x,y,z
frozenset('taipei') -> t,a,i,p,e
二進制型別(Binary Types)
位元組(bytes):用來儲存 8bit(byte) 的無號整數(0及正整數),介於 0 到 255,具有不可變性,以小括號(())框起來,並於小括號內以逗號(,)來進行分隔,若有多個資料值可用字串寫法框起來,也可以將字串以 UTF-16 編碼轉為位元組,例如以下程式碼:(如果資料值只傳入一個正整數的n,則會建立長度為n,並由 null 字元組成。)(推薦觀看:「Python 位元組序列 bytes 使用教學與範例」)
bytes(5) -> b'\x00\x00\x00\x00\x00'
bytes([1, 2, 3, 4]) -> b'\x01\x02\x03\x04'
bytes("hello", "ascii") -> b'hello'
bytes("python", "utf-16") -> b'\xff\xfep\x00y\x00t\x00h\x00o\x00n\x00'
位元陣列(bytearray):用來儲存 8bit(byte) 的無號整數(0及正整數),介於 0 到 255,具有可變性,以小括號(())框起來,並於小括號內以逗號(,)來進行分隔,若有多個資料值可用字串寫法框起來,也可以將字串以 UTF-16 編碼轉為位元組,例如以下程式碼:(如果資料值只傳入一個正整數的n,則會建立長度為n,並由 null 字元組成。)(官方說明:「Python Binary Sequence Types」)
bytearray(5) -> bytearray(b'\x00\x00\x00\x00\x00')
bytearray([1, 2, 3, 4]) -> bytearray(b'\x01\x02\x03\x04')
bytearray("hello", "ascii") -> bytearray(b'hello')
bytearray("python", "utf-16") -> bytearray(b'\xff\xfep\x00y\x00t\x00h\x00o\x00n\x00')
記憶體檢視(memoryview):用來查詢位元值的資料值,在 Python2 與 3 之間的呈現效果有些差異,例如以下程式碼:(參考來源:RUNOOB|Python bytearray() 函数)
Python 2
a = memoryview('abcefg') -> v[1] = 'b'
Python 3
a = memoryview(bytearray("abcefg", 'utf-8')) -> print(v[1])
= 98