高価な関数f(x)を1回計算したいだけですが、かなり頻繁に呼び出されます。本質的には、関数が呼び出された最初のときには、xの範囲について値の集まりを計算する必要があります。なぜなら、とにかく積分されてスプラインで補間されるからです。さらなる使用。Python:関数内から関数を再定義する
私のアイデアは、実装が非常に簡単なので、次のようなことをしていました。最初に関数が呼び出され、何かをしてから、それ自体を再定義し、その後は何かを実行します。しかし、それは期待どおりに機能せず、一般に悪い習慣であるかもしれません。
def f():
def g():
print(2)
print(1)
f = g
f()
f()
予想される出力:
1
2
実際の出力:
1
1
定義グラム()Fの外側には、()は役立ちません。なぜこれは機能しませんか?それ以外に、今私が考えることができる唯一の解決策は、いくつかのグローバル変数を使用することです。それとも何とかこのクラスを書くのは理にかなっていますか?
+1:[memoization](http://en.wikipedia.org/wiki/Memoization)と[装飾](http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators)、装飾を許可するPythonバージョン、行く方法です。正式な例[here](http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize) – Johnsyweb
dictがunhashableであるという事実に問題はありませんか? – juanchopanza
@juanchopanzaはい、はい。この例では不要な引数は削除されています。 – phihag