Python 全攻略第 1 章 Python Data Types 課程筆記
前言
- 這一章主要在學習 Python Data Types 的相關概念,目前你看到的只是我示範如何使用 ChatGpt 輔助產生這章節筆記的成果,後續還會有增新,請期待~
學習目標
- 了解 Python 中常用的 7 種資料類型
- 掌握如何宣告不同類型的變數
- 熟悉不同資料類型的運算規則
內容大綱
- 數值型別: 整數、浮點數
- 字串(String)
- 布林值(Boolean)
- 列表(List)
- 字典(Dictionary)
- 集合(Set)
- 元組(Tuple)
Class Name | Type | Description | Copy By Reference |
---|---|---|---|
Integer | int | Whole numbers, such as -5, 0, 16 | No |
Float | float | Numbers with decimal point, such as 10.25, 0.04, 3.14159 | No |
String | str | Ordered sequence of characters, such “Aloha” | No |
Boolean | bool | Logical value indicating True or False | No |
List | list | Ordered sequence of data, such as [12, “Hello”, True] | Yes |
Dictionaries | dict | Unordered key-value pairs, such as {“name”: “Wilson”} | Yes |
Tuples | tup | Ordered immutable sequence of objects, such as (10, “100”, ”Hello”) | Yes |
Sets | set | Unordered collection of unique objects {“a”, “b”} | Yes |
以上圖表來自 Udemy Python 全攻略 Wilson 老師第一章的投影片資料
數值類型
Python 中的數值分為兩大類: 整數 和 浮點數。
- 整數就是我們平常使用的整數,例如:
x = 10
y = -3
z = 0
-
變數與賦值:
- a = 2 的意義
- 變數(Variable): 創建一個型別的實例(Class Instance) →
- 等號(assignment)的意義 → 把右邊的參考(Value Reference) 賦值給左邊的變數
- Python 是動態型別(Dynamic Typing),會依據右邊的賦執型別,來決定左邊變數的型別
- 右邊數值的意義 → 記憶體儲存的參照位置
- a = 2 的意義
-
浮點數就是帶有小數點的數字,例如:
a = 1.5
b = 3.14159
c = -0.01
- 數值型別可以進行標準的算術運算,像是加法、減法、乘法和除法等。
print(10 + 3.5) # 13.5
print(16 - 10) # 6
print(2 * 5) # 10
print(10 / 2) # 5.0
-
除了基本的四則運算外,還有許多內建的 Python 運算函數可以提供進一步的數值運算,例如:
- abs()
- pow()
- max()
- min()
- round()
-
轉型 (Type Casting) 概念: 不同型別之間,可透過轉型來轉換,轉型的語法就是直接用型別加上小括號,就可以來進行轉型,例如:
- str(123)、float(1/4)、int(“1.0”)、list((1, 2, 3, 4, 5))
- 轉型失敗: 拋出 Value Error 例外,例如: int(“a”)
a = (1, 2)
print(type(a)) # <class 'tuple'>
a = list(a)
print(type(a)) # <class 'list'>
-
補充: type() 函數是 Python Build-in 函數,可用來檢查當下物件的型別
-
其他提供數學運算的模組(需 import math):
- e (對數)
- pi (圓周率)
- floor()
- ceil()
- sqrt()
字串 (String)
- Python中的字串需要用單引號
'
或雙引號"
包起來,例如:
str1 = 'Hello World'
str2 = "Python String"
- 字串是有序的字元序列 (起始序號為0),可進行索引 (Index)、分割 (slice) 和接合 (Join) 等操作,例如:
- 比較: print(3 + 3) 和 print(“3” + “3”) → 字串的相加就是將多個字串接合 join 的概念
- print(“abcde”[0]) → a;print(“abcde”[:-1]) → edcba
name = 'John'
print(name[0]) # J
s = 'Hello'
s1 = 'World'
print(s + ' ' + s1) # Hello World
- string 是 不變的 (Immutable): 如果物件被創造出來後,其 value 沒辦法被改變,稱之為 Immutable objects,常見的 Immutable objects 的型態,像是 int, float, string, tuple。
- Immutable → 賦值的參照(Reference)不變
- 細節可參考 [Python 基礎教學] 什麼是 Immutable & Mutable objects
- For string 的相關內建函數:
- len()
- upper()
- lower()
- issupper()
- index()
布林值(Boolean)
- 布林值只有
True
和False
兩種值,通常用來判斷邏輯條件。
x = True
y = False
print(x and y) # False
print(x or y) # True
- 補充: Python 的註解,以上面範例為例,# 字元代表跟在 # 字元之後的同行註解文字,用來針對該行的程式碼作補充說明,以上述範例為例,註解帶出來的是左邊程式碼執行的結果
- 單行註解 → 於要加入的單行這动文字前使用 # 來標示,如以下範例所示。
- 如多行註解 → 於要加入的多行註解文字的上下行使用連續三個單引號字元做為前導與結束標示,如以下範例所示。
a = 2 # a 的賦值是 2
print(a)
def add(a: int, b: int):
'''
兩個整數的加法
'''
return a + b
print(add(2, 3))
- 注意: 在 python 中所有的物件都具備 True 的布林值 → 除了 None、0、False 以外!!!
- 補充: None 和其他程式語言的 Null 類似功能,代表目前的物件沒有任何賦值參照的指定。
- boolean class 是 integer 的 subclass。
- print(issubclass(bool, int)) # True
- True 和 False 其實是 boolean class 的 singleton instance,因此 True 與 False 亦會是 integer 的 instance
- isinstance(True, bool) # True
- isinstance(False, bool) # True
- int(True) # 1
- int(False) # 0
- 關於 Python boolean 的更多細節可參考: Python bool
列表 (List)
- 列表 (List) 是最常用的資料結構之一,是一群物件成員的有序序列,用方括號
[]
表示,裡面的元素型別可以不同。 - list、tupple、dictionary 都可視為是物件的容器。
nums = [1, 2, 3]
mix = [1, "Hello", True]
- 列表是可變 (mutable) 序列 → list 的物件成員可變,所以可以進行索引、修改、排序等操作。
nums[0] = 5 # 修改第一個元素為5
nums.sort() # 對列表進行排序
字典 (Dictionary)
- 字典(Dictionaries)用大括號
{}
表示,裡面是鍵與值成對(key and value pair)成員的集合。
person = {"name": "Mary", "age": 25}
print(person["name"]) # Mary
- 鍵(key)用於查找對應的值(value),字典是無序的。
- key 必須是 immutable & hashable object
- build-in method: keys(), values(), items()
集合 (Set)
- 集合 (Set) 與列表 (List) 類似,唯一的區別在於集合中的元素無序,而且元素不可重複。
s = {2, 4, 6}
s.add(8) # 添加元素
print(4 in s) # True
- 我們通常利用集合進行交集、聯集等運算。
- Build-in Functions:
- difference() 差集
- intersection()交集
- isdisjoint()
- issubset() 是否為子集, issuperset() 是否為父集
- union() 聯集
[Note]: 上圖參考自 Python Set
元組 (Tuple)
- 元組 (Tuple) 用小括號
()
定義,裡面的元素型別可以不同。
point = (2, 4)
mix = (3, "hello", False)
- 元組是不可變 (Immutable) 序列,不能修改其中的元素 (這意味不能增減或者置換 Tuple 裡的成員)。
- 元組的封裝 (Packing) 與解封裝 (unpacking)
- Tuple Packing → 創建 Tuple - Create Tuple,例如: a = (8, 99, 90, 6.7)
- Tuple Unpacking → Tuple 指派(創建) - Tuple assignment,例如: (n1, n2) = (99, 7),n1 對應 99,而 n2 對應 7
- Unpacking Releation Exception → Value Error Exception,例如: (num1, num2, num3, num4, num5) = (88, 9.8, 6.8, 1)
- 還記得 Tuple 是不可變的,因此左邊成員數必須和右邊賦值的成員數對等!!!
- 改成 (num1, *num2, num3) = (88, 9.8, 6.8, 1) → num1 對應 88, num2 對應 (9.8, 6.8), num3 對應 1,其中 * 表示 args 表示這個參數是複數的參數(另外有 **args 是指 key-value pairs parameters)
- 關於 Tuple 的 Packing & Unpacking 更多細節可參考 Tuple Assignment
結語
- 以上介紹了Python中最常用的7種資料類型,希望大家在學習的過程中多加練習,熟能生巧!
- 目前使用 ChatGpt 產生的內容大致如上,但往往其實受限於產生的篇幅限制,有時會無法完整產生所有的內容,後續的部分,就要技巧性地請 AI 分段產生,目前只是利用這個初稿展示一下成果,但實際的筆記,其實依據我個人習慣,我都會反覆的增刪及修改最後的內容,以符合自己的期待,也會陸續在每次看到一些值得追加的部分,再做增添,這也是線上筆記的優點所在,與大家共勉之~