4

下面是一个 Python 字典(来自 OpenERP 应用程序),其中的字段默认通过 lambda。我可以看到如何使用这种模式,显然“活动”是一个布尔值,“级别”是一个整数,“价格”是一个浮点数。

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

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

4

2 回答 2

5

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

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

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

快速演示:

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

demo这里返回*a捕获的任何内容;作为调用参数的 0 个或多个值的元组。

于 2013-11-02T15:53:15.373 回答
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
}
于 2014-06-19T10:43:41.517 回答