関数を引数として受け入れ、新しい変更された関数を返すメタ関数を定義したいとします。 f
が生じるであろうものは何でもそう関数に作用して関数を返す関数
metaf(f) -> f**2
、metaf
のようなものが2のべき乗に答えてしまう(その結果が、2乗することができない場合はそう。それもエラーを上げて)。
現在、私はそれを行うために見つけた方法はmetaf
の定義におけるf
の引数を明示的に参照する必要があり、つまりは、この作品
metaf = lambda f, x : f(x)**2
、その後
mynewf = lambda x : metaf(f, x)
を定義しますが、私は、入力引数に多くのバリエーションがある複雑な引数関数のためにそれが保持されるのだろうかと思います。
別の方法、特にmetaf
定義で引数を指定する必要のない方法を提案できるかどうかは分かりません。
編集:以下の両方の回答が参考になった。ちょうど参考のために、私はラムダ式を使ってmetaf
を定義する方法を理解しました。少し面倒が、それでも注目に値するかもしれません:
metaf = lambda func: lambda *args, **kwargs : func(*args, **kwargs)**2
デコレータを実装しようとしていますか? – cdarke