以编程方式创建函数
Creating a function programmatically
关于这个主题有很多有趣的帖子,但我似乎要么不理解他们的答案,要么瞄准不同的东西。这就是我想要做的。我有两个(或更多)函数想要组合成一个新函数。以下代码段显示了我开始的内容以及我希望结束的内容。
def a(x):
0.2 * x[1] - 0.4 * x[0]
def b(x):
0.4 * x[0] - 0.2 * x[1]
def ab(x):
return [0.2 * x[1] - 0.4 * x[0], 0.4 * x[0] - 0.2 * x[1]]
问题是,我想在 运行 时间动态创建 ab
。
我有一个包含所有函数的列表 ml
,所以我可以在新函数
中执行以下操作
def abl(x):
ml = [a, b]
rl = []
i = 0
for f in ml:
rl.append(f(x[i]))
i = i + 1
然后调用abl
。此代码组合了各个函数并产生了预期的输出结果。但是,每次调用 abl
rl
都必须重新构建,这看起来很浪费。
是否有另一种组合 a
和 b
以创建新函数的方法 ab
?
您可以通过 lambda expressions:
动态 return 新功能
def a(x):
return 0.2 * x[1] - 0.4 * x[0]
def b(x):
return 0.4 * x[0] - 0.2 * x[1]
def combine(func1, func2):
return lambda x: [func1(x), func2(x)]
ab = combine(a, b)
print(ab([1.3, 2.9]))
输出:
[0.05999999999999994, -0.05999999999999994]
您可以扩展 lambda
approach to any number of functions using *args
:
def a(x):
return 0.2 * x[1] - 0.4 * x[0]
def b(x):
return 0.4 * x[0] - 0.2 * x[1]
def c(x):
return 0.5 * x[0]
def d(x):
return 0.5 * x[1]
def combine(*args):
return lambda x: [f(x) for f in args]
abcd = combine(a, b, c, d)
print(abcd([1.3, 2.9]))
给予
[0.05999999999999994, -0.05999999999999994, 0.65, 1.45]
关于这个主题有很多有趣的帖子,但我似乎要么不理解他们的答案,要么瞄准不同的东西。这就是我想要做的。我有两个(或更多)函数想要组合成一个新函数。以下代码段显示了我开始的内容以及我希望结束的内容。
def a(x):
0.2 * x[1] - 0.4 * x[0]
def b(x):
0.4 * x[0] - 0.2 * x[1]
def ab(x):
return [0.2 * x[1] - 0.4 * x[0], 0.4 * x[0] - 0.2 * x[1]]
问题是,我想在 运行 时间动态创建 ab
。
我有一个包含所有函数的列表 ml
,所以我可以在新函数
def abl(x):
ml = [a, b]
rl = []
i = 0
for f in ml:
rl.append(f(x[i]))
i = i + 1
然后调用abl
。此代码组合了各个函数并产生了预期的输出结果。但是,每次调用 abl
rl
都必须重新构建,这看起来很浪费。
是否有另一种组合 a
和 b
以创建新函数的方法 ab
?
您可以通过 lambda expressions:
动态 return 新功能def a(x):
return 0.2 * x[1] - 0.4 * x[0]
def b(x):
return 0.4 * x[0] - 0.2 * x[1]
def combine(func1, func2):
return lambda x: [func1(x), func2(x)]
ab = combine(a, b)
print(ab([1.3, 2.9]))
输出:
[0.05999999999999994, -0.05999999999999994]
您可以扩展 lambda
approach to any number of functions using *args
:
def a(x):
return 0.2 * x[1] - 0.4 * x[0]
def b(x):
return 0.4 * x[0] - 0.2 * x[1]
def c(x):
return 0.5 * x[0]
def d(x):
return 0.5 * x[1]
def combine(*args):
return lambda x: [f(x) for f in args]
abcd = combine(a, b, c, d)
print(abcd([1.3, 2.9]))
给予
[0.05999999999999994, -0.05999999999999994, 0.65, 1.45]