python----函數的動態傳參


函數的動態傳參

*args 將所有的實參的位置參數聚合到一個元組,並將這個元組賦值給args

  有些時候,對於函數,傳入的實參數量可能是不固定的,也就是動態的,這個時候我們就需要用到函數的動態傳參。下面舉個個列子,我需要一個函數,無論我給他任意個數字參數,他都能返回我所有數字的和。

def count(*args):
    sum0 = 0
    for i in args:
        sum0 += i
    return sum0
print(count(1,2,3,4,5))
#運行結果:15

這樣無論我在函數count中輸入多少個數字,都能返回和。*args就是動態傳參,實質上是函數會將接受到的值打包成元祖的形式賦值給args,不信你可以在函數值用type去判斷。總結:*在函數的定義時,在 *位置參數,聚合

**kwargs 將所有的關鍵字實參作為字典的鍵值對聚合到一個字典,並賦值給kwargs

  有時候,需要接受任意數量的實參,但預先不知道傳遞給函數的會是什么樣的信息。在這種情況下,可將函數編寫成能夠接受任意數量的鍵 — 值對 —— 調用語句提供了多少就接
受多少。

def func1(**kwargs):
    print(kwargs)
  
func1(name = 'king',age = 24)
運行結果:{'name': 'king', 'age': 24}

可以看出**是將接收到的關鍵字參數作為鍵值對賦值給,kwargs。

  編寫一個函數,將一輛汽車的信息存儲在一個字典中。這個函數總是接受制造商和型號,還接受任意數量的關鍵字實參。這樣調用這個函數:提供必不可少的信息,以及兩個名稱 — 值對,如顏色和選裝配件。這個函數必須能夠像下面這樣進行調用:

car = make_car('subaru', 'outback', color='blue', tow_package=True)

分析要求,題目要求函數總是接受制造商和型號,也就是這2個參數是必須填的,我們可以設置成位置參數,而其他還接受任意數量的關鍵字實參。所以需要用到**方法:

def make_car(name,producter,**kwargs):
    dic = {}
    dic['車型'] = name
    dic['生產商']=producter
    for i in kwargs:
        dic[i] = kwargs[i]
    return dic
car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(car)
#運行結果:
{'車型': 'subaru', '生產商': 'outback', 'color': 'blue', 'tow_package': True}
#如果只輸入car = make_car('subaru', 'outback')
則會打印 {'車型': 'subaru', '生產商': 'outback'}

函數形參的順序

位置參數,*args, 默認參數 **kwargs我們在定義形參時,必須遵循這樣的原則位置參數,默認參數

def func(a,b,sex=''): # print(a)
    print(sex) func(100,200,) 位置參數,*args, 默認參數 def func(a,b,*args,sex='',): # print(a)
    print(a,b) print(sex) print(args) func(100,200,1,2,34,5,6)
位置參數,
*args, 默認參數 **kwargs def func(a,b,*args,sex='',**kwargs,): print(a,b) print(sex) print(args) print(kwargs) func(100,200,1,2,34,5,6,sex='nv',name='alex',age=1000)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM