mpn*_*pnm 11 python arguments keyword-argument
我正在用*args
和测试一些代码**kwargs
,我dictionary
为**kwargs
. 出于某种原因,我得到
def func(*args, **kwargs):
if args:
second_test(*args)
elif kwargs:
second_test(**kwargs)
def second_test(stringa, integera, floata):
print("Name: %s, Problems Correct: %d, Points: %f" % (stringa, integera, floata))
profile_1 = ["David", 21, 132.00]
func(*profile_1)
profile_1a = {'Name': 'David', 'Problems Correct': 21, 'Points': 132.00}
func(**profile_1a)
Run Code Online (Sandbox Code Playgroud)
代码开始于line 44
并结束于line 57
。这是我得到的错误:
TypeError: second_test() got an unexpected keyword argument 'Name'
Run Code Online (Sandbox Code Playgroud)
我在谷歌上搜索了“意外的关键字参数”,但我永远找不到定义;只有其他stackoverflow文章。我的代码有什么问题?
Nov*_*ice 11
当传入kwargs
一个函数时,它期望在列表中找到确切的变量名。如果相反,您的字典键是stringa
, integera
,则floata
该函数将正常工作。
因此,您需要更改函数变量名称或更改字典中的键名才能使其正常工作
关键字参数是通过名称传递的所有“未知/意外”命名参数。
例如,让我们定义一个带有一个参数的函数
def func(a):
print(a)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们像这样使用“意外”命名参数调用此函数
func(b=3) # remember we didn't define b as an argument
Run Code Online (Sandbox Code Playgroud)
然后我们会得到一个 TypeError。但是如果我们修改函数以排除这些“意外”命名参数,那么我们可以运行前面的代码
def func(a, **kwargs):
print(a)
print(kwargs["b"]) # now, if we pass an argument 'b' to the function, this will print its value (if we don't, we get a KeyError)
> func(3, b=15)
3
15
Run Code Online (Sandbox Code Playgroud)