實參的類型 | Python從入門到精通:高階篇之四
不定長參數
定義一個函數,可以求任意個數字的和。
def sum(a,b):
print(a+b)
#sum(123,456)
sum(123,456,789)
執行結果:

此時可以發現隻能計算2個數的和,3個數時程式出錯。我們發現,隻有形參數量跟實參數量一緻才能調用函數計算結果,否則程式就會出錯。這樣跟題目原本的意義不符合。
此時我們需要另外一種方式,在定義函數的時候,可以在形參前邊加上一個*,這樣這個形參将會擷取到所有的實參。它将會将所有的實參儲存到一個元組中。
a,b,*c = (1,2,3,4,5,6),是指将1指派給a,2指派給b,3,4,5,6,,都指派給c。
def fn(*a):
print("a =",a,type(a))
#fn()
fn(1,2,3,4,5)
此時,可以發現a是一個元組,*a會接收所有的位置實參,并且會将這些實參統一儲存到一個元組中(裝包)優勢在于可以控制傳參的數量。
現在來實作上面所說的函數。
def sum(*nums):
# 定義一個變量,來儲存結果
result = 0
# 周遊元組,并将元組中的數進行累加
for n in nums :
result += n
print(result)
#sum(123)
#sum(123,456)
sum(123,456,789,10,20,30,40)
這就是不定長參數,帶星号的形參隻能有一個,帶星号的參數,可以和其他參數配合使用。
def fn2(a,b,*c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1,2,3,4,5)
第一個參數給a,第二個參數給b,剩下的都儲存到c的元組中。
可變參數不是必須寫在最後,但是注意,帶*的參數後的所有參數,必須以關鍵字參數的形式傳遞。
def fn2(a,*b,c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1,2,3,4,c=5)
第一個參數給a,剩下的位置參數給b的元組,c必須使用關鍵字參數。
def fn2(*a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1,2,3,b=4,c=5)
所有的位置參數都給a,b和c必須使用關鍵字參數。
如果在形參的開頭直接寫一個*,則要求我們的所有的參數必須以關鍵字參數的形式傳遞。否則會報錯。
def fn2(*,a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
#fn2(1,2,3,b=4,c=5)
fn2(a=3,b=4,c=5)
*形參隻能接收位置參數,而不能接收關鍵字參數。
def fn3(*a) :
print('a =',a)
fn3(b=1,d=2,c=3)
是以b,d,c三個參數沒有被接收。此時我們有另外一種解決方案。
\*\*
形參可以接收其他的關鍵字參數,它會将這些參數統一儲存到一個字典中,字典的key就是參數的名字,字典的value就是參數的值。
def fn3(**a) :
print('a =',a,type(a))
fn3(b=1,d=2,c=3)
\*\*
形參隻能有一個,并且必須寫在所有參數的最後。
def fn3(b,c,**a) :
print('a =',a,type(a))
print('b =',b)
print('c =',c)
fn3(b=1,d=2,c=3,e=10,f=20)
配套視訊課程,點選這裡檢視
擷取更多資源請訂閱
Python學習站