1. 參數基礎
函數參數是向函數傳遞數據的主要方式,Python 提供了多種參數傳遞機制。
基本用法
def greet(name): # name 是形式參數print(f"Hello, {name}!")greet("Alice") # "Alice" 是實際參數
使用場景:當函數需要外部數據來完成其操作時
2. 參數類型
2.1 位置參數 (Positional Arguments)
最常見的參數類型,按位置順序傳遞
def power(base, exponent):return base ** exponentprint(power(2, 3)) # 8
最佳實踐:
- 將最重要的參數放在前面
- 避免超過5個位置參數,否則考慮使用對象或字典
2.2 關鍵字參數 (Keyword Arguments)
通過參數名指定,不依賴位置
print(power(exponent=3, base=2)) # 8
優勢:
- 提高代碼可讀性
- 允許跳過某些參數
2.3 默認參數 (Default Arguments)
定義函數時指定默認值
def power(base, exponent=2): # exponent默認為2return base ** exponentprint(power(3)) # 9
print(power(3, 3)) # 27
重要規則:
- 默認參數只計算一次(對于可變對象要特別注意)
- 默認參數應放在參數列表最后
2.4 可變參數
2.4.1 *args - 可變位置參數
接收任意數量的位置參數,打包為元組
def sum_all(*numbers):return sum(numbers)print(sum_all(1, 2, 3)) # 6
使用場景:不確定需要接收多少參數時
2.4.2 **kwargs - 可變關鍵字參數
接收任意數量的關鍵字參數,打包為字典
def print_info(**info):for key, value in info.items():print(f"{key}: {value}")print_info(name="Alice", age=25)
最佳實踐:常用于包裝函數或配置參數傳遞
3. 參數解包
3.1 列表/元組解包 (*)
def func(a, b, c):print(a, b, c)args = [1, 2, 3]
func(*args) # 1 2 3
3.2 字典解包 (**)
kwargs = {'a': 1, 'b': 2, 'c': 3}
func(**kwargs) # 1 2 3
應用場景:從其他函數獲取參數后傳遞
4. 參數傳遞機制
Python 使用"對象引用傳遞"(按共享傳參)
def modify_list(lst):lst.append(4) # 修改會影響原對象my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 4]
重要特性:
- 不可變對象(數字、字符串、元組)表現為"按值傳遞"
- 可變對象(列表、字典)表現為"按引用傳遞"
5. 類型提示 (Python 3.5+)
def greeting(name: str, age: int = 18) -> str:return f"{name} is {age} years old"
優勢:
- 提高代碼可讀性
- IDE 能提供更好的代碼補全和檢查
- 可使用 mypy 進行靜態類型檢查
6. 參數最佳實踐
- 保持參數數量合理:理想情況下不超過5個
- 使用關鍵字參數提高可讀性,特別是布爾參數
- 避免可變默認參數:默認值應為不可變對象
- 合理使用類型提示:特別是公共API
- 參數順序:位置參數 → 默認參數 → *args → **kwargs
7. 高級技巧
僅限關鍵字參數
def func(a, b, *, c, d): # c和d必須用關鍵字傳遞passfunc(1, 2, c=3, d=4) # 正確
func(1, 2, 3, 4) # 錯誤
參數注解
def func(a: 'description', b: int = 5) -> 'return description':pass
應用:文檔生成或參數驗證框架