一、參數的概念
參數指的是函數在定義時,接受外部傳入的數據的變量,供函數內部使用。Python中的函數可以接受多個參數,其中有些必選,有些可選;有些是位置參數,有些是關鍵字參數。
二、位置參數和關鍵字參數
在Python中,函數的參數可以分為位置參數和關鍵字參數。
位置參數指的是函數調用時按照定義的順序傳入的參數,它們與函數中形參的位置一一對應。例如,下面這個函數接受兩個位置參數x和y:
def add(x, y): return x + y print(add(2, 3)) # 輸出5
關鍵字參數指的是函數調用時用參數名來傳遞的參數,這種方式不依賴於參數的位置。關鍵字參數需要在函數定義時設定默認值,否則在調用時必須填寫參數,否則將會拋出異常。例如:
def person_info(name, age, sex='男'): print('姓名:', name) print('年齡:', age) print('性別:', sex) person_info('張三', 20) # 輸出:姓名:張三,年齡:20,性別:男 person_info('李四', 22, sex='女') # 輸出:姓名:李四,年齡:22,性別:女
要注意的是,關鍵字參數必須在位置參數之後,否則會拋出異常:
person_info(name='張三', age=20, '男') # 拋出異常
三、默認參數
當函數參數有默認值時,調用函數時可以省略這些參數。默認參數可以減少函數參數的數量,在某些場合可以提高代碼的可讀性。例如:
def print_info(name, age=18, sex='男'): print('姓名:', name) print('年齡:', age) print('性別:', sex) print_info('張三') # 輸出:姓名:張三,年齡:18,性別:男 print_info('李四', 20) # 輸出:姓名:李四,年齡:20,性別:男 print_info('王五', 22, '女') # 輸出:姓名:王五,年齡:22,性別:女
需要注意的是,默認參數必須指向不變對象,否則會出現意想不到的錯誤:
def test(num, L=[]): L.append(num) return L print(test(1)) # 輸出[1] print(test(2)) # 輸出[1, 2],而不是預期的[2]
這是因為在Python中,函數默認參數的值是在函數定義的時候生成的,而不是在調用的時候生成。因此,默認參數指向的不變對象(比如list、tuple、string等)在函數的多次調用中會被多次修改,從而導致意想不到的結果。
四、可變長參數
在Python中,可變長參數是指函數在定義時可以接受一定數量的位置參數或關鍵字參數。
1、可變長位置參數
可變長位置參數使用星號(*)來表示,可以接收任意數量的位置參數,並將它們作為元組傳遞給函數。例如:
def test(*args): print(args) test(1, 2, 3) # 輸出(1, 2, 3)
2、可變長關鍵字參數
可變長關鍵字參數使用兩個星號(**)表示,在函數內部將其作為字典處理。例如:
def test(**kwargs): print(kwargs) test(a=1, b=2, c=3) # 輸出{'a': 1, 'b': 2, 'c': 3}
需要注意的是,可變長位置參數和可變長關鍵字參數必須在位置參數之後,否則會報錯:
def test(a, b, *args, **kwargs): print(a, b, args, kwargs) test(1, 2, 3, 4, c=5, d=6) # 輸出1, 2, (3, 4), {'c': 5, 'd': 6}
五、函數參數的傳遞方式
函數參數的傳遞方式分為值傳遞和引用傳遞。在Python中,函數參數的傳遞方式是值傳遞。
值傳遞是指將實參的值傳遞給形參,形參中的操作不會影響實參的值。例如:
def test(x): x = 10 a = 5 test(a) print(a) # 輸出5
而引用傳遞是指將實參的引用傳遞給函數,函數中的操作會修改實參的值。在Python中,可變對象(如list、dict)是引用傳遞,而不可變對象(如int、str、tuple)是值傳遞。
六、總結
Python函數中的參數有多種類型,包括位置參數、關鍵字參數、默認參數、可變長參數等。在使用時需要注意參數的傳遞方式,以確保函數能夠正常運行。
完整代碼如下:
# 位置參數和關鍵字參數 def add(x, y): return x + y print(add(2, 3)) # 輸出5 def person_info(name, age, sex='男'): print('姓名:', name) print('年齡:', age) print('性別:', sex) person_info('張三', 20) # 輸出:姓名:張三,年齡:20,性別:男 person_info('李四', 22, sex='女') # 輸出:姓名:李四,年齡:22,性別:女 # 默認參數 def print_info(name, age=18, sex='男'): print('姓名:', name) print('年齡:', age) print('性別:', sex) print_info('張三') # 輸出:姓名:張三,年齡:18,性別:男 print_info('李四', 20) # 輸出:姓名:李四,年齡:20,性別:男 print_info('王五', 22, '女') # 輸出:姓名:王五,年齡:22,性別:女 # 可變長參數 # 可變長位置參數 def test(*args): print(args) test(1, 2, 3) # 輸出(1, 2, 3) # 可變長關鍵字參數 def test(**kwargs): print(kwargs) test(a=1, b=2, c=3) # 輸出{'a': 1, 'b': 2, 'c': 3} # 函數參數的傳遞方式 # 值傳遞 def test(x): x = 10 a = 5 test(a) print(a) # 輸出5 # 引用傳遞 def test(l): l.append(4) lst = [1, 2, 3] test(lst) print(lst) # 輸出[1, 2, 3, 4]
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/158195.html