解释这个lambda

时间:2013-11-02 15:51:45

标签: python lambda openerp

下面是一个Python字典(来自OpenERP应用程序),字段通过lambda默认。我可以看到如何使用这种模式,显然'active'是一个布尔值,'level'是一个整数,'price'是一个浮点数。

但有人可以解释这是如何工作的吗?什么是'a'代表在这里?

_defaults = {
    'active': lambda *a: False,
    'level': lambda *a: 1,
    'price': lambda *a: 1.0,
    }

2 个答案:

答案 0 :(得分:5)

*a语法捕获任意数量的参数; lambda接受0个或多个参数,并且都返回一个常量值,无论如何。

基本上,这些lambda会忽略传入的所有参数。

语法也可以在函数中使用,并且还有**keywords形式的等效关键字参数,从而产生映射。

快速演示:

>>> demo = lambda *a: a
>>> demo()
()
>>> demo(1, 2, 3)
(1, 2, 3)

demo此处返回捕获的*a;一个0或更多值的元组,它们是调用的参数。

答案 1 :(得分:1)

在旧的OpenERP版本中(如果我没记错的话,最高可达5.0)默认值只能是函数。

在实际需要计算默认值的情况下,这些都很好。

但是,在某些情况下,默认值只是一些常量,例如1.0。然后需要返回总是1.0的普通函数。 lambda表达式允许快速创建这样的函数:

_defaults = {
    'field': lambda *a: 1.0
}

只是一种较短的写作方式:

def f():
    return 1.0

_defaults = {
    'field': f
}

最新版本的OpenERP / Odoo允许您只指定一个常量而不是lambda函数。所以现在你也可以这样做:

_defaults = {
    'field': 1.0
}