Python 创建能够根据给定参数生成函数对象(本例中为分段函数)的脚本
我想知道做以下事情的最好方法是什么。考虑一个分段函数,它取不同范围的常数值。例如:从t=0到t=2,x=3,从t=2到t=4,x=1。我通过以下参数定义分段函数: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 <=
- 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