下面是一个Python字典(来自OpenERP应用程序),字段通过lambda默认。我可以看到如何使用这种模式,显然'active'是一个布尔值,'level'是一个整数,'price'是一个浮点数。
但有人可以解释这是如何工作的吗?什么是'a'代表在这里?
_defaults = {
'active': lambda *a: False,
'level': lambda *a: 1,
'price': lambda *a: 1.0,
}
答案 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
}