def validate(request, *args, **kwargs):
form_class = kwargs.pop('form_class')
extra_args_func = kwargs.pop('callback', lambda request, *args, **kwargs: {})
感谢
a={'a':'aaa','b':'bbb'}
b=a.pop('a',lambda x,y:x)
print a
我知道dict.pop('a'),但我不知道dict.pop('a',func) 这里有什么用'func'
答案 0 :(得分:2)
表达式:
lambda request, *args, **kwargs: {}
构建一个匿名函数,必须使用至少一个参数调用(如果命名,必须命名为request
)并且可以使用任意数量的位置和命名参数调用:调用时,它会忽略所有参数并返回一个新的空字典。
代码段:
a={'a':'aaa','b':'bbb'}
b=a.pop('a',lambda x,y:x)
print a
打印{'b': 'bbb'}
(也是在代码段执行后保持绑定的值a
)并将字符串'aaa'
绑定到名称b
。 .pop
方法的第二个参数在这种情况下不起作用:它仅在第一个参数 not 被发现作为调用该方法的字典中的键时使用(其中case,.pop
的第二个参数是调用.pop
返回的“默认值”,不对字典进行任何更改)。在这种情况下,'a'
确实在那时被发现为字典a
中的一个键,因此它从该字典中删除,并且相应的值,字符串'aaa'
由调用.pop
(然后它被绑定到名称b
)。
答案 1 :(得分:0)
这是“lambda function”。这是一种表达内联声明的函数的简短方法。它看起来像这样:
lambda arg1,arg2,...: expression
并且相当于无名函数,如下所示:
def some_nameless_function(arg1,arg2,...):
return expression
那么,你在那里的代码,
def validate(request, *args, **kwargs):
form_class = kwargs.pop('form_class')
extra_args_func = kwargs.pop('callback', lambda request, *args, **kwargs: {})
相当于一个如下所示的函数:
def nameless_function(request, *args, **kwargs):
return {}
def validate(request, *args, **kwargs):
form_class = kwargs.pop('form_class')
extra_args_func = kwargs.pop('callback', nameless_function)
答案 2 :(得分:0)
它正在做的是从kwargs dict中弹出一个回调函数,或者如果没有设置,它会创建一个什么都不做的lambda函数(返回一个空的dict)。 request, *args, **kwargs
部分可能是回调函数的“签名”。