5

在开发 OpenERP 时,我发现了以下代码

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

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

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

4

1 回答 1

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。Lambda 和其他函数一样。我可以这样做:

def func():
    return time.time()
d = {'a': time.time(), 'b': func}
于 2012-09-06T06:37:33.800 回答