一、實參和形參
實參: 函數執行的時候給函數傳遞的具體的值
形參: 在函數聲明時編寫的變量
函數執行時每個形參都要有值
# a,b為形參
def add(a, b):print(a + b)
# 3,4為實參
add(3, 4)
二、實參
1.位置參數
按位置給形參傳遞數據
def add(a, b):print(a + b)
# 3,4為位置參數
add(3, 4)
2.關鍵字參數
按形參的名字傳遞數據
def add(a, b, c):print(a + b - c)
# 關鍵字參數
add(c=10, a=5, b=4)
3.混合參數
位置參數與關鍵字參數,混合使用
注意順序: 先位置參數,后關鍵字參數
def add(a, b, c):print(a + b - c)
add(10, c=5, b=4)
二、形參
1. 位置參數
def add(a, b, c):print(a + b - c)
2. 默認值參數
調用函數時默認值參數可以不給具體的值,直接使用默認值
# 調用函數時可以只給a,b傳值,c默認為100
def add(a, b, c = 100):print(a + b - c)
3. 動態傳參(*args和**kwargs)
*:接收任意個位置參數,自動打包成元組
**:接收任意個關鍵字參數,自動打包成字典
*args和**args只是通常的命名習慣,也可以命名成其他的
3.1 *
def chi(*food):print(food)
chi("米飯", "蘋果", "牛肉", "冰淇淋")
# 打印結果為:('米飯', '蘋果', '牛肉', '冰淇淋')
3.2. **
def chi(**food):print(food)
chi(main_food="米飯", fruit="蘋果", meat="牛肉")
# 打印結果為:
# {'main_food': '米飯', 'fruit': '蘋果', 'meat': '牛肉'}
4. 形參的使用順序(重要)
正確使用順序:位置參數 > *args > 默認值參數 > **kwargs
例如:
def func(a, *args, b=10, **kwargs):print(a, args, b, kwargs)
三、可以接受任意參數的函數
# *args接受所有的位置參數,**kwargs接受所有的關鍵字參數
def func(*args, **kwargs):print(args)print(kwargs)
*和**的打散功能(重要):
在形參: 聚合,*把位置參數聚合成元組,**把關鍵字參數聚合成字典
在實參: 打散,*把可迭代對象轉化成位置參數,**把字典轉化成關鍵字參數
# 例如:列表的打散
def func(*args):print(args)
lst = ["a", "b", "c"]
# 一個個傳遞參數
func(lst[0], lst[1], lst[2])
# 打散直接傳遞
func(*lst)
# 例如:字典的打散
def func(**kwargs):print(kwargs)dic = {"a": 1, "b": 2, "c": 3}
# 一個個傳遞參數
func(a=dic["a"], b=dic["b"], c=dic["c"])
# 打散直接傳遞
func(**dic)