2 回答
TA贡献1856条经验 获得超17个赞
如果我们检查您的示例:
def get_data(arg1, **kwargs):
print arg1, arg2, arg3, arg4
在get_data函数的名称空间中,有一个名为的变量arg1,但没有名为的变量arg2。因此您无法访问名称空间中没有的函数或变量。
实际上,在您的命名空间中;有一个变量arg1和一个dictionary叫做的对象kwargs。**在kwargs(名称kwargs在这里并不重要,也可以是其他名称。)之前使用表示法来告诉您的python编译器kwargs是一个字典,并且该字典中的所有值都将在函数定义中作为命名参数进行评估。
让我们看一下这个例子:
def myFunc(**kwargs):
do something
myFunc(key1='mykey', key2=2)
当您myFunc使用命名参数key1和进行调用时key2,您的函数定义的行为类似于
def myFunc(key1=None, key2=None):
但是有一个例外!由于myFunc没有命名参数,因此编译器不知道如何直接处理它们,因为您可以将任何命名参数传递给函数。
因此,您的函数像调用函数一样接受字典中的那些命名参数:
myFunc({key1:'mykey', key2:2})
因此,您的函数定义会在字典中获取这些参数。**kwargs在这一点上定义您的字典,这也告诉编译器任何命名的参数都将被接受(**在kwarg之前的符号的帮助下)
def myFunc(**kwargs):
print kwargs
将打印
{key1:'mykey', key2:2}
因此,在您的示例中,您可以kwargs像字典一样使用。
def myFunc(**kwargs):
kwargs['arg2']
kwargs.get('arg3')
我希望它并不复杂(:
添加回答
举报