Python 创建能够根据给定参数生成函数对象(本例中为分段函数)的脚本

Python 创建能够根据给定参数生成函数对象(本例中为分段函数)的脚本,python,function,class,object,piecewise,Python,Function,Class,Object,Piecewise,我想知道做以下事情的最好方法是什么。考虑一个分段函数,它取不同范围的常数值。例如:从t=0到t=2,x=3,从t=2到t=4,x=1。我通过以下参数定义分段函数: x的列表,例如[3,3,1,1,1] 或 两个列表生成一个x的列表。上面的示例由[3,1](x的值)和[2,3](它们的重复频率)生成 由此,我希望脚本使用上述示例创建以下函数: def function(x): if 0 <= x < 2: return 3 if 2 <=

我想知道做以下事情的最好方法是什么。考虑一个分段函数,它取不同范围的常数值。例如:从t=0到t=2,x=3,从t=2到t=4,x=1。我通过以下参数定义分段函数:

  • x的列表,例如[3,3,1,1,1]

  • 两个列表生成一个x的列表。上面的示例由[3,1](x的值)和[2,3](它们的重复频率)生成
由此,我希望脚本使用上述示例创建以下函数:

def function(x):
    if 0 <= x < 2:
        return 3
    if 2 <= x <= 4:
        return 1
def函数(x):

如果0可能您应该查看
bisect.bisect\u right
函数():


编辑:更新答案,仅使用一个参数调用
函数()

我喜欢这个命题,但我想获得一个x的函数。所以我在香肠机中输入参数,得到一个x的函数。所以本质上是一个随某些参数动态变化的函数。我将编辑这个问题,因为这个问题不太清楚。@frozenbooger更新了我的答案。现在只需一个参数
x
即可调用
function()
def function(x)
    if bound1 <= x < bound2:
        return x1
    if bound2 <= x < bound3: 
        return x2
    if bound3 <= x < bound4:
        return x3

    ...

    if bound_n-1 <= x < bound_n:
        return x_n
from bisect import bisect_right
from functools import partial

# <0, 2) -> 3
# <2, 4) -> 1
# <4, 6) -> 99
bounds          = [0, 2, 4, 6]
return_values   = [3, 1, 99]

def fn(val, bounds, return_values):
    i = bisect_right(bounds, val) - 1
    return return_values[i] if i < len(return_values) else None

# function(x)
function = partial(fn, bounds=bounds, return_values=return_values)

print(function(0))
print(function(1))
print(function(2))
print(function(3))
print(function(4))
print(function(5))
print(function(6))
3
3
1
1
99
99
None