当我尝试在程序下运行时,在第二个循环中收到错误消息,提示 第二个func有多个值,我希望这个程序循环运行。 我的假设是Kwargs Rude不会再使用相同的值进行更新。
问题1:kwargs.update(animal =“ Lion”)是否正确修改值?
问题2:为什么我收到错误消息?
下面的代码仅用于学习目的,无其他意图。 任何帮助表示赞赏。
我使用Python 3.6
Second_Func(variable1,** kwargs,Rude =“ leone”)以下的错误消息 TypeError:Second_Func()获得了多个关键字参数值 '粗鲁'
NiceVar = "Buddy"
def First_Func(variable1,**kwargs):
for name,value in kwargs.items():
print("First man",name)
kwargs.update(animal = "Lion")
Second_Func(variable1,**kwargs,Rude="leone")
def Second_Func(value1,**kwargs):
for name,value in kwargs.items():
print("Second man",value)
Third_Func(value1,**kwargs,band="martin")
def Third_Func(google,**kwargs):
for name,value in kwargs.items():
print("Third man",value)
print("my Third Function",google)
First_Func(google,**kwargs)
First_Func(NiceVar,Animal ="man")
答案 0 :(得分:2)
欢迎使用StackOverflow!
所以,这里有几件事。
kwargs['animal'] = 'Lion'
就足够了。 kwargs
实际上只是一本字典,没什么特别的。 **
只是告诉函数将所有额外的关键字args集中到该字典中。Third_Func
调用First_Func
)。因此,在第一时间,First_Func
将kwarg Rude
设置为"leone"
,然后将其传递给函数行。然后,当它再次回到First_Func
时,kwargs
现在包含来自调用栈的键'Rude'
。然后,您尝试通过一个kwarg文字将原始 Rude
kwarg(在kwargs
内部)和Rude
的第二个副本传递给{{1} }。当名为kwarg的名称具有两个值时,Python并不知道您的意思,因此它会崩溃。希望可以解决问题!
示例代码:
Second_Func
答案 1 :(得分:1)
问题1:是的,kwargs.update
是正确的方法之一。但是根据一些观察,比
分配。了解有关此here的更多信息。
问题2:因为您是从Third_Func
再次致电First_Func
来收集以前收集的所有kwarg。然后,当Second_Func
再次添加Rude="leone"
被调用,您将得到
错误。请注意此处,此时kwargs
已经包含一个
键Rude
,因此会出现重复项。
还要注意,即使解决了这个问题,您也将获得无穷的递归。