9.Python 模組 (Module)
經過前幾章的教學想必你對基礎語法有觀念了吧? 第一章節曾提及『豐富且完整的套件,不必製造輪子及可以快速組裝你所需要的功能。』所說的就是模組 (Module)
甲居工作室日期:2024/04/07
寫程式碼時有一個非常重要的觀念是 DRY (Don’t repeat yourself),避免重複撰寫程式碼,除了可讀性低,也不容易維護。
def functionName(parameters):# 函式內的程式碼# 可以包含任意數量的程式碼行return value
def bmi(height, weight):return round(weight / (height ** 2))print(bmi(1.75, 69)) # 23print(bmi(1.8, 70)) # 22
上例我們撰寫了 BMI 的函式,只需呼叫即可運算無需要再次撰寫想同的內容。
按照位置順序定義的參數,呼叫函式時以位置來相互對應。
def bmi(height, weight):pass
bmi(1.8, 70)呼叫函式時以名稱指定的參數。
def bmi(height, weight):pass
bmi(weight=65, height=1.7 )已經為參數指定一個默認值。可以選擇是否要傳入。
def bmi(height, weight=80):pass
bmi(1.8)*args:接收任意數量的位置參數,這些參數將被收集到args元組中並進行處理。**kwargs:接收任意數量的關鍵字參數,這些參數將被收集到kwargs字典中並進行處理。
def exampleFunc(a, b, c=0, *args, **kwargs):print('位置參數 a:', a)print('位置參數 b:', b)print('默認參數 c:', c)print('*args 參數:', args)print('**kwargs 參數:', kwargs)# 測試函式exampleFunc(1, 2, 3, 4, 5, name='Alice', age=30)
總結一下參數傳遞順序:
Python 函式的參數可以通過位置或明確的關鍵字傳遞。為了提高程式的可讀性和效能,我們可以限制參數的傳遞方式。這樣一來,開發者只需查看函式定義,就能夠確定各個參數是按位置、按位置或關鍵字、還是按關鍵字傳遞。這樣可以讓代碼更加清晰易懂,同時也能提高程式的執行效率。
/:在/之前的參數只能以位置方式傳遞,而在/之後的參數可以以位置或關鍵字方式傳遞。用於區分位置參數和關鍵字參數。
def func(a, b, /, c, d):pass
*:在*之後的參數只能以關鍵字方式傳遞。這種方式通常用於接收不定數量的參數。
def func(a, b, *, c, d):pass
我們現在有了函式的概念,要來補充說明全域變數 (Global Variables) 和區域變數 (Local Variables) 是在程式中使用的兩種不同範圍的變數。
全域變數:
global 關鍵字在函數內聲明為全域變數。區域變數:
今有下程式:
text = ''def a(value=None):if value:print(value)text = valueelse:print(text)a()
是不是會認為 text 是全域變數,然而實際上在這個程式中,text 變數被賦值為空字符串 '',但在函數 a() 中,你嘗試在條件語句中給 text 重新賦值。然而,當你在函數內部給 text 賦值時,Python 將它視為區域變數而不是全域變數。
text = ''def a(value=None):global text # 使用 global 關鍵字聲明 text 為全域變數if value:print(value)text = valueelse:print(text) # 正確輸出全域變數的值a()
| 函式 | |
|---|---|
| globals() | 以字典形式回傳全域變數 |
| locals() | 以字典形式回傳區域變數 |