什么是下一个代码的意思,'lambda请求'和'** kwargs:{}',我从来没有看到这个

时间:2009-12-27 00:23:17

标签: python

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'

3 个答案:

答案 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部分可能是回调函数的“签名”。