python - 给定一个输出列表的函数,Python 是否可以为每个组件提取一个函数?

标签 python

例如,假设我有一个将 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/

相关文章:

python - 用 Pillow 像素化图像

python - rpy2 : Korean characters are not working on rpy2

python - Jira POST 和 PUT Rest 调用从 Python 返回错误 400

python - 更改 pybuilder 的默认源位置

python - 功能制作

python - 如何在 Python 中使用 step 获取随机 float

python - 转换数据框

python - 如何在 Python 中执行 'hot folder'?

python - Plotly:如何在直方图中同时显示正态分布和核密度估计?

python - 我可以在 python 中使用类变量,就像在 C 中使用结构变量一样吗?