2

语境:

作为一个个人学习项目,我一直在研究一个简单的计算机代数系统。我有一个单变量多项式类,其中术语的系数存储为字典。运算符重载两个多项式 A 和 B 的总和涉及找到相似的项,将它们相加并为 A 或 B 中的项创建一个新项,而不是两者 (XOR)。这按预期工作,但......

问题:

我注意到当我想添加两个以上的多项式时,这个过程很慢,因为有一个可以同时完成的通用计算。例如,给定四个多项式 (A,B,C,D) 的总和:

A + B + C + D

被评估为:

((A+B) + C) + D

换句话说:

add(add(add(A,B),C),D)

我可以编写一个特殊的 add 函数重载,当有多个求和时会调用它?

add(A,B,C,D)
4

4 回答 4

3

我可以编写一个特殊的 add 函数重载,当有多个求和时会调用它?

简而言之:没有

这是所有运算符和参数的列表:http: //docs.python.org/reference/datamodel.html#emulating-numeric-types

使用自定义函数是您唯一的选择

于 2010-12-07T03:11:53.097 回答
2

它(有点)可以通过一些黑客攻击......

基本上,该过程是在初始计算后不返回值 - 而是返回一个承诺,即您将在某个时候计算该值。

所以a + b将返回一个表示要完成的计算的对象(但实际上并不执行计算),我将其称为(+ a b).

然后在评估下一个加法时,我们最终得到(+ a b) + cwhich 的评估结果为(+ a b c),依此类推。

只有当访问结果的属性时,您才真正执行计算。

于 2010-12-07T03:23:14.367 回答
2

您是否真的分析了代码以找出瓶颈在哪里?python中的函数调用相当快。

于 2010-12-07T03:11:02.127 回答
1

您可以使用reduce内置函数

像这样 reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 它将计算 ((((1+2)+3)+4)+5)。

有关它的更多信息,您可以从这里获得: http: //docs.python.org/library/functions.html#reduce

于 2010-12-07T12:14:25.047 回答