0

関数のリストがあるとします

f1(x,y),f2(x,y),....

以下の関数を定義するにはどうすればよいですか。

z(x,y)=f1(x,y)+f2(x,y)+...

あとでxを指定できるようにしたいです。だから誰かが y=c の値を入れたら、z 関数を x の関数にしたい! 1 つの関数 f があり、y=c を指定するだけで f(x,y) を x の関数にしたい単純なケースでは、次のように使用できます。

z=lambda x:f(x,c)

しかし、そのような方法は複数の関数では機能しません!

4

4 に答える 4

5

数十の機能に役立ちます:

def z(x,y,functions):
    return sum(F(x,y) for F in functions)

したがって、次のように使用できます。

z(x,y,(f,g,h))

または、関数の数がリストから取得される場合:

z(x,y,list_of_functions)
于 2013-06-20T21:13:41.773 に答える
2

以前の回答を微調整しfunctools.partialて、必要な動作を作成することができます。

不完全に適用された関数から新しい関数を生成するために、(haskell コンストラクトに似た) 部分的な関数呼び出しを行うことができます。見てみな:

from functools import partial

funcs = [lambda x, y: x + y] * 10 # a list of ten placeholder functions.

def z(functions, x, y):
    return sum(f(x, y) for f in functions)

a = partial(z, funcs, 1)
# 'a' is basically the same as: lambda y: z(funcs, 1, y)
print a # <functools.partial object at 0x7fd0c90246d8>
print a(1) # 20
print a(2) # 30
print a(3) # 40

詳細はこちら: http://docs.python.org/2/library/functools.html#functools.partial

于 2013-06-20T21:41:33.483 に答える
1

他の任意の関数がある場合はどうなりますか? 古い数の関数を合計したい場合はどうしますか?

def funcSum(x, y, *funcs):
    return sum((func(x,y) for func in funcs))

funcSum(x, y, f, g, h)

任意の数の引数はもう少し複雑になります...

于 2013-06-20T21:27:16.197 に答える