1. 程式人生 > 其它 >python中的函式引數*args和**kwargs的使用

python中的函式引數*args和**kwargs的使用

首先,args和kwargs都不是必須的,它們只是一個變數的名稱,命名是約定俗成的,用別的變數名也可以,只有前面的 * 和 ** 是必須的。* 和 ** 兩者主要用於定義函式的輸入引數,使用了兩者,則代表此函式引數可以入一組資料

1、*args的使用

  將輸入引數打包成功元組(tuple)的形式給函式體使用

  例一:

def Tu_args(*args):
    # 返回args的值及其資料型別
    return args, type(args)

a = Tu_args(1, 2, 34, 4)
print(a)

結果:

  有結果可知, *args傳遞的是一組資料,資料型別是元組

  例二:

  使用*args傳遞一組引數,在函式內求和、平均數、乘積

# 求一組資料的平均數、和、積
avg, su, amass = 0, 0, 1    # 定義三個變數,用於儲存平均數、和、積


def Read(*args):
    global avg, su, amass   # 宣告三個變數為全域性變數
    for i in args:
        j = int(i)  # 將args裡的資料轉換成int型別(因為input函式輸入的都為str型別),保存於j
        su += j     # 遍歷求和,保存於su
        amass *= j  #
遍歷求積,儲存為amass avg = su / len(args) # 使用求和的結果求平均數,若和求錯,即平均數也錯誤 return '總和:%d' % su, '平均值:%d' % avg, '乘積:%d' % amass # 返回和、平均數、積 if __name__ == '__main__': ff = input('請輸入:') # 使用input函式輸入的內容均為str型別 f = ff.split(',') # 將輸入的資料按 , 切片,儲存為f C = Read(*f) # 呼叫函式Read() print
(C)

結果:

2、**kwargs的使用

  ** kwargs會把輸入引數打包成dict給函式體呼叫

  例一:

def dc(**kwargs):
    return kwargs, type(kwargs)


a = dc(ssd=23, sdj=232)     # 使用了**kwargs,則代表函式輸入的引數需要是字典形式的
print(a)

結果:

  例二:

def function(avi, *args, **kwargs):
    print(avi, args, kwargs)

function(33, 23, 43, 45645, 4545, 'kkk', d=23, kk=32, ks='askdjk')

結果:

可見,*args傳入的引數會自動打包成元組形式,而**kwargs會要求輸入引數帶有變數和值,自動打包成字典形式