- 當一段程式碼出現連續複製貼上
三次
的情況,就該考慮將它改寫成函式 - Python function: def
(1) 函式名稱
(2) 傳入參數
(3) 程式執行區塊
(4) 回傳值
p.s. 沒有和 C 語言一樣強制事先定義回傳值和傳入參數的資料型別# 定義函式名稱和傳入參數 def add_number(num1, num2): # 程式執行區塊 result = num1 + num2 # 回傳值 return result
- 如果function執行區塊還未定義,只有定義名稱和參數時,可以使用
pass
關鍵字當作佔位符號
p.s. pass 表示先佔著,之後再補上,program才不會出現錯誤def add_number(num1, num2): pass
- Python 函式回傳值上可以使用 tuple 容器物件讓函式不只回傳一個值
def get_the_first_and_last_element(user_list): user_list = user_list.copy() user_list[0] = 'steven' return (user_list[0], user_list[len(user_list) - 1]) user_list = ['jack', 'tom', 'toby', 'marry', 'amy'] (first_element, last_element) = get_the_first_and_last_element(user_list) # steven, amy # ['jack', 'tom', 'toby', 'marry', 'amy'] print(first_element, last_element) print(user_list)
- 區域變數:僅能在一般function內部使用
全域變數:能在function範圍外使用,一般會在變數名稱前面加上
global
作為表示由於全域變數很容易被不同地方的程式使用到所以常常會產生不可預期的錯誤,一般會建議若能使用區域變數或是透過參數將變數傳入函式中盡量優先使用。
區域變數 v.s. 全域變數
(1) 即使變數命名相同,函式內"區域變數"修改不影響"全域變數"
(2) 如果function中沒有宣告任何變數,則python設定會向外尋找相同變數名稱的全域變數
作為該變數
(3) 如果再function中以global宣告將變數為全域變數,則修改該變數指定的物件則會更動到全域變數- 類別 class:使程式更加模組化和更好的重複使用和維護 -> 物件導向程式設計
可以想成 class 類別是物件的製造機,創建物件的過程又稱實例化(透過 class 產生 instance)
新增方法(讓物件可使用):class Product: # __init__ 為定義的初始化物件屬性值的設定方式 # self 代表該物件, 傳入參數會給該物件屬性 self.屬性 def __init__(self, name, price): self.name = name self.price = price
class Product: # __init__ 為定義的初始化物件屬性值的設定方式 # self 代表該物件, 傳入參數會給該物件屬性 self.屬性 def __init__(self, name, price): self.name = name self.price = price def get_discount_price(self, discount_rate): """ 參數傳入折扣率,回傳該商品回傳 """ return self.price * discount_rate
- 模組:一個 Python 程式檔案可以讓其他程式引用
- 套件:透過一個資料夾,裡面放置多個模組檔案來讓其他程式引用 -> 適合複雜的模組程式管理