繁体   English   中英

kargs 和 args 的行为很奇怪

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM