在以下表达式中使用lambda

时间:2012-09-06 06:34:24

标签: python lambda openerp

在开发OpenERP的过程中,我找到了以下代码

'app_date': lambda *a: time.strftime('%Y-%m-%d')

我知道lambda是什么。我的问题是为什么要使用lambda?为什么不只是

'app_date': time.strftime('%Y-%m-%d')

1 个答案:

答案 0 :(得分:13)

'app_date': time.strftime('%Y-%m-%d')会立即评估time.strftime。通过将其包装在lambda中,它的执行将延迟到稍后(调用lambda的时间)。粗略地说,区别在于“我定义它的时间”和“我使用它的时间”。看:

>>> d = {'a': time.time(), 'b': lambda: time.time()}
>>> d['a'], d['b']()
(1346913545.049, 1346913552.409)
>>> d['a'], d['b']()
(1346913545.049, 1346913554.518)
>>> d['a'], d['b']()
(1346913545.049, 1346913566.08)

我允许在每个d['a'], d['b']()之间经过一段时间。请注意d['a']始终相同:这是我定义d的时间。 d['b']是一个功能。 d['b']()(带括号)调用函数,该函数在每次调用时重新计算时间,因此每次使用时都会有所不同。

此外,lambda并没有什么特别之处。 Lambdas就像其他任何功能一样。我也可以这样做:

def func():
    return time.time()
d = {'a': time.time(), 'b': func}