Python:仅在上定义函数

2024-05-16 09:10:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从预因子列表中定义一个函数,例如多项式。像这样的

order = [1,0,1]

def poly(x):
    res = 0
    for i, o in enumerate(order):
      res += o * x**i
    return res

所以poly(x)返回1 + x²。你知道吗

我需要为不同的x多次调用该函数,但使用相同的预因子。上面的函数每次被调用时都执行for循环,这是相当低效的,尤其是当order列表很长时。 如何只循环一次并调用不同x的结果?什么是肾盂疗法?你知道吗


Tags: 函数in列表forreturn定义deforder
3条回答

根据@Eugene Sh的建议,可以消除反复提高权力的现象:

xx = 1

def poly(x, order):
    global xx
    xx = 1
    def f(x, o):
        global xx
        ret = xx * o
        xx *= x
        return ret
    return sum(f(x,o) for o in order)

Python无法胜过数学。我们想到的唯一优化方法是避免计算用0乘以的项:

def poly(x, order=(1, 0, 1)):
    res = 0
    for i, o in enumerate(order):
        if o:
            res += o * x**i
    return res

作为一个班轮:

def poly2(x, order=(1, 0, 1)):
    return sum(o * x**i for i, o in enumerate(order) if o)

代码#1:循环求和(慢)

def poly(x,order=[1,0,1]) : return sum([o*x**i for i,o in enumerate(order)])

示例:

poly(2,order=[2,0,2])

>> 10
>> Execution time: 5.29289245605e-05

代码#2:和映射(更快)

def poly(x,order=[1,0,1]) : return sum(map(lambda (i,o): o*x**i,enumerate(order)))

示例:

poly(2,order=[2,0,2])

>> 10
>> Execution time: 3.00407409668e-05

相关问题 更多 >