高価な操作を実行し、頻繁に呼び出される関数があります。ただし、操作は 1 回だけ実行する必要があります。その結果はキャッシュできます。
無限ジェネレーターを作成しようとしましたが、期待した結果が得られませんでした:
>>> def g():
... result = "foo"
... while True:
... yield result
...
>>> g()
<generator object g at 0x1093db230> # why didn't it give me "foo"?
なぜg
発電機ではないのですか?
>>> g
<function g at 0x1093de488>
編集:このアプローチがうまくいかなくても問題ありませんが、次のように、通常の関数とまったく同じように実行するものが必要です。
>>> [g() for x in range(3)]
["foo", "foo", "foo"]