[英]kargs and args behaving strange
我只是在用 kwargs 和 args 测试一段代码。 但是为什么 args 会在下面的代码中获取所有传递的参数?
def myfunc(color='red',*args,**kwargs):
print (args)
print (color)
print (kwargs)
names=["Ramesh","Krishna"]
ages={'Ramesh_age':20,'Krishna_age':10,'Kanchi_age':5}
myfunc('blue',names,ages)
结果:
(['Ramesh', 'Krishna'], {'Krishna_age': 10, 'Ramesh_age': 20, 'Kanchi_age': 5})
blue
{}
为什么包括年龄在内的所有内容都分配给了年龄而kwargs是空的?
您需要使用 *names 来解开姓名,使用 **ages 来解开年龄。
像这样myfunc('blue', *names, **ages)
准确地说,kwargs 没有获取任何值,因为 kwargs 会寻找键值对。
您通过争论的方式,没有键值对。 你路过
ages={'Ramesh_age':20,'Krishna_age':10,'Kanchi_age':5}
作为一个整体 object,而不是解构 object 并将其作为单独的键值对传递。
正如其他人指出的那样,正确的方法是将 object 解构为单独的键值对,如下所示:
**ages
args查找任何值,而kwargs查找任何键值对。 当您调用 function 时,您必须在args之前指定* ,在kwargs之前指定** 。 这就是 Python 的工作方式。
这是你的代码:
def myfunc(color='red',*args,**kwargs):
print (args)
print (color)
print (kwargs)
names=["Ramesh","Krishna"]
ages={'Ramesh_age':20,'Krishna_age':10,'Kanchi_age':5}
# to call the function
myfunc('blue', *names, **ages)
结果如下:
('Ramesh', 'Krishna')
blue
{'Ramesh_age': 20, 'Krishna_age': 10, 'Kanchi_age': 5}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.