OpenERPの開発中に、次のコードを見つけました
'app_date': lambda *a: time.strftime('%Y-%m-%d')
私はラムダが何であるかを知っています。私の質問はなぜラムダを使用するのですか?
'app_date': time.strftime('%Y-%m-%d')
'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}