python - 有没有一种Python式的方法将基于范围的分段函数分组为单个函数?

标签 python function lambda

我有一个函数数组 [f(x),g(x),...]
我想要做的是根据 x 的值所在的范围调用适当的函数。

f = lambda x: x+1
g = lambda x: x-1
h = lambda x: x*x
funcs = [f,g,h]
def superFunction(x):
    if x <= 20:
      return(funcs[0](x))
    if 20 < x <= 40:
      return(funcs[1](x))
    if x > 40:
      return(funcs[2](x))

有没有更好/Pythonic 的方法来处理动态数量的函数

计划是沿着数据部分动态生成 n 个 polyfit 函数,然后将它们组合成一个可调用函数。

最佳答案

您将使用调度序列:

funcs = (
    (20, f),
    (40, g),
    (float('inf'), h),
)

def superFunction(x):
    for limit, f in funcs:
        if x <= limit:
            return f(x)

或者,如果函数和限制列表很大,请使用二等分搜索来查找最接近的限制。

关于python - 有没有一种Python式的方法将基于范围的分段函数分组为单个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17323779/

相关文章:

python - 排列嵌套列表中的元组组合

c++ - 成员函数指针的静态成员数组

r - 使用 purrr 和预定义函数添加多个输出变量

javascript - stopPropagation 函数读取未定义

python - 从文件中读取连续的三列到数组中

python - "k in d"怎么可能是 False,而 "k in d.keys()"是 True?

python - 如何在 Python 中删除 Riak 存储桶?

C++ lambda : Access static method in lambda leads to error 'this was not captured for this lambda function'

C++:实现一个接收 lambda 作为输入的高阶函数

lambda - Null 或空 lambda 作为默认值