下面是一个 Python 字典(来自 OpenERP 应用程序),其中的字段默认通过 lambda。我可以看到如何使用这种模式,显然“活动”是一个布尔值,“级别”是一个整数,“价格”是一个浮点数。
但是有人可以确切地解释这是如何工作的吗?'a' 在这里代表什么?
_defaults = {
'active': lambda *a: False,
'level': lambda *a: 1,
'price': lambda *a: 1.0,
}
*a
语法捕获任意数量的参数;lambda 接受 0 个或多个参数,并且无论如何都返回一个常量值。
本质上,这些 lambda 忽略传入的所有参数。
该语法也可以在函数中使用,并且还有一个等效于 形式的关键字参数**keywords
,从而产生映射。
快速演示:
>>> demo = lambda *a: a
>>> demo()
()
>>> demo(1, 2, 3)
(1, 2, 3)
demo
这里返回*a
捕获的任何内容;作为调用参数的 0 个或多个值的元组。
在旧的 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
}