5

OpenERPの開発中に、次のコードを見つけました

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

私はラムダが何であるかを知っています。私の質問はなぜラムダを使用するのですか?

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

4

1 に答える 1

13

'app_date': time.strftime('%Y-%m-%d')time.strftimeすぐに評価します。それをラムダでラップすることにより、その実行は後で(ラムダを呼び出すとき)まで延期されます。大まかに言えば、「これを定義したとき」と「これを使ったとき」の違いです。見て:

>>> 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。ラムダは他の関数と同じように機能します。私は同じことをすることができます:

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