def fuction(a, b=1, *c, **d):
print(a, b, c, d)
list1 = [1, 2, 3, 4, 5]
dic = {'q': 0, 'w': 0, 'e': 0}
fuction(1, b=2, *list1, **dic)
報錯:
fuction(1, b=2, *list1, **dic)
TypeError: fuction() got multiple values for argument 'b'
此時b=2為何不能覆寫b=1
uj5u.com熱心網友回復:
有沒有人回復我uj5u.com熱心網友回復:
你應該這樣傳參:fuction(1, b=2, c=list1, d=dic)你這樣傳參,看結果提示TypeError: fuction() got multiple values for argument 'b',就知道傳入的引數過多了
因為*是將其決議出來
實際fuction(1, b=2, *list1, **dic) 傳入的是 fuction(1, b=2, 1, 2,3,4,5, ...)
引數中的* 和** 是表示其是可變引數(即長度不一定),**表示其是要以鍵值對的方式傳入,傳入時并不需要再在前面加*
另外應為在可變引數前已經有了默認引數,根據優先級判斷的關系,所以你這種情況傳參必須指定c=list1, d=dic
可以找引數相關的博客了解一下函式傳參規則
uj5u.com熱心網友回復:
我覺得應該是編譯器把變長引數的第一個值讀到默認引數里了。所以就提示fuction() got multiple values for argument 'b'定義函式時,把變長引數放到 默認引數前,就能實作你的需求。
以下代碼在 python3.7.4 測驗通過
def fuction(a, *c, b=1, **d):
print(a, b, c, d)
list1 = [1, 2, 3, 4, 5]
dic = {'q': 0, 'w': 0, 'e': 0}
fuction(1, b=2, *list1, **dic)
uj5u.com熱心網友回復:
如果按你的函式定義, 一般用法是這樣fuction(1, 2,4,5,6,7, b=12, f = 101, g=102,h = 10000)
這樣才是 **kwargs 的傳遞方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/13318.html
上一篇:SQL優化-索引
下一篇:堪比培訓機構的MySQL系列博客
