天天看點

不定長參數 | Python從入門到精通:高階篇之五

實參的類型 | Python從入門到精通:高階篇之四

不定長參數

定義一個函數,可以求任意個數字的和。

def sum(a,b):
    print(a+b)

#sum(123,456)
sum(123,456,789)           

執行結果:

不定長參數 | Python從入門到精通:高階篇之五
不定長參數 | Python從入門到精通:高階篇之五

此時可以發現隻能計算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)           
不定長參數 | Python從入門到精通:高階篇之五
不定長參數 | Python從入門到精通:高階篇之五

此時,可以發現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)           
不定長參數 | Python從入門到精通:高階篇之五
不定長參數 | Python從入門到精通:高階篇之五
不定長參數 | Python從入門到精通:高階篇之五

這就是不定長參數,帶星号的形參隻能有一個,帶星号的參數,可以和其他參數配合使用。

def fn2(a,b,*c):
    print('a =',a)
    print('b =',b)
    print('c =',c)

fn2(1,2,3,4,5)           
不定長參數 | Python從入門到精通:高階篇之五

第一個參數給a,第二個參數給b,剩下的都儲存到c的元組中。

可變參數不是必須寫在最後,但是注意,帶*的參數後的所有參數,必須以關鍵字參數的形式傳遞。

def fn2(a,*b,c):
    print('a =',a)
    print('b =',b)
    print('c =',c)

fn2(1,2,3,4,c=5)           
不定長參數 | Python從入門到精通:高階篇之五

第一個參數給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)           
不定長參數 | Python從入門到精通:高階篇之五
不定長參數 | Python從入門到精通:高階篇之五

*形參隻能接收位置參數,而不能接收關鍵字參數。

def fn3(*a) :
     print('a =',a)

fn3(b=1,d=2,c=3)           
不定長參數 | Python從入門到精通:高階篇之五

是以b,d,c三個參數沒有被接收。此時我們有另外一種解決方案。

\*\*

形參可以接收其他的關鍵字參數,它會将這些參數統一儲存到一個字典中,字典的key就是參數的名字,字典的value就是參數的值。

def fn3(**a) :
    print('a =',a,type(a))

fn3(b=1,d=2,c=3)           
不定長參數 | Python從入門到精通:高階篇之五

\*\*

形參隻能有一個,并且必須寫在所有參數的最後。

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從入門到精通:高階篇之五

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站