一、參數的種類
在Python函數中,參數種類分為位置參數、默認參數、可變參數和關鍵字參數。
1、位置參數
位置參數是最普通的參數,也是必須要傳入的參數。例如下面的函數:
def add(num1, num2): return num1 + num2
調用add函數時,必須要傳入兩個位置參數:
result = add(1, 2) print(result) # 結果為3
2、默認參數
默認參數是在函數定義時設置一個默認值,如果調用時不傳入此參數值,則函數會使用默認值。例如下面的函數:
def multiply(num1, num2=1): return num1 * num2
調用multiply函數時,如果不傳入第二個參數,則默認使用num2=1:
result = multiply(5) print(result) # 結果為5
3、可變參數
可變參數是指能夠處理可變數量參數的函數。使用*args表示,其中args是一個元組,可以在函數中動態調用參數。例如下面的函數:
def add_nums(*args): result = 0 for num in args: result += num return result
調用add_nums函數時,可以傳入任意數量的參數:
result = add_nums(1, 2, 3, 4, 5) print(result) # 結果為15
4、關鍵字參數
關鍵字參數是指通過「鍵:值」鍵值對的方式傳入函數的參數,使用**kwargs表示,其中kwargs是一個字典。例如下面的函數:
def print_info(name, age, **kwargs): print("Name:", name) print("Age:", age) for key, value in kwargs.items(): print(key + ": " + value)
調用print_info函數時,可以使用任意數量的關鍵字參數:
print_info("Lucy", 25, hometown="Beijing", profession="Doctor") # 輸出結果: # Name: Lucy # Age: 25 # hometown: Beijing # profession: Doctor
二、參數使用的順序
在Python函數中,參數需要按照以下順序使用:
1、位置參數
2、默認參數
3、可變參數
4、關鍵字參數
例如,在下面的函數中:
def func(num1, num2=0, *args, **kwargs): pass
調用func函數時,必須先傳入num1這個位置參數,其次可以選擇傳入num2這個默認參數,然後再傳入可變參數args和關鍵字參數kwargs。例如:
func(1) # 只傳入了num1這個位置參數 func(1, num2=2) # 傳入num1和num2兩個參數 func(1, 2, 3) # 傳入num1、num2和args這個可變參數 func(1, 2, 3, a=1, b=2) # 傳入num1、num2、args和kwargs這兩個參數
三、傳入參數的技巧
在Python函數中,有許多傳入參數的技巧可以使用,下面介紹三個常用的技巧。
1、參數解包
參數解包使用*和**符號,可以將元組、列表、字典等數據結構的元素解開後作為參數傳入函數中。例如:
def add(num1, num2): return num1 + num2 nums = [1, 2] result = add(*nums) # 將nums中的元素解包傳入add函數 print(result) # 結果為3
2、lambda函數作為參數
在Python中,lambda函數是一種匿名函數,可以使用在函數參數中,如下所示:
def operate(func, x, y): return func(x, y) result = operate(lambda x, y: x*y, 2, 3) print(result) # 結果為6
在上述代碼中,lambda函數作為第一個參數傳入operate函數中。在該例子中,傳入的lambda函數會計算x和y的積。
3、參數默認值的設置
參數默認值的設置可以使用None來避免使用默認值。如下所示:
def operate(num1, num2, result=None): if result is None: result = 0 # 以下為函數的計算過程 pass
在上述代碼中,函數operate在計算過程中需要使用result這個參數,如果傳入的參數沒有設置默認值,則result的默認值為None。因此在函數中,需要設置if result is None:的判斷來避免出現None值的計算。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303733.html