例如,假设我有一个将 R2 映射到 R2 的向量函数:
fun = lambda x1, x2: [x1**2 + 1, x2**2 - x1]
我想要一些可以让我做到这一点的东西:
for f in components(fun):
print(f(2,3)) # Print first 5, then 7
注意:我不是问如何迭代一个输出的组件,这很简单(对于 f(2,3): 中的 val:),而是如何迭代计算输出中每个组件的函数。这可能吗?
最佳答案
好吧,你可以做一些技巧,尽管你需要显式地声明预期的组件数量,因为没有办法知道Python函数将有多少个输出(除非你做一些类似“探测”函数的事情测试值,这也是一种可能性,但更复杂):
def components(fun, n):
for i in range(n):
yield lambda *args, **kwargs: fun(*args, **kwargs)[i]
那么你的循环可能是:
for f in components(fun, 2):
print(f(2,3))
如果你想避免重复计算,你可以使用某种内存。在Python 3中你可以使用lru_cache
:
from functools import lru_cache
def components(fun, n):
# You can tune lru_cache with a maxsize parameter
fun = lru_cache()(fun)
for i in range(n):
yield lambda *args, **kwargs: fun(*args, **kwargs)[i]
关于python - 给定一个输出列表的函数,Python 是否可以为每个组件提取一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41999922/