2

コンテクスト:

個人的な学習プロジェクトとして、私は単純な数式処理システムに取り組んできました。項の係数が辞書として格納されている単変量多項式クラスがあります。2つの多項式AとBの合計をオーバーロードする演算子には、類似の項を見つけ、それらを追加し、AまたはBの項の新しい項を作成する必要がありますが、両方ではありません(XOR)。これは期待どおりに機能しますが...

質問:

2つ以上の多項式を追加したい場合、同時に実行できる一般的な計算があるため、プロセスが遅いことに気付きました。たとえば、4つの多項式(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

ボトルネックがどこにあるかを把握するために、実際にコードのプロファイルを作成しましたか?Pythonでの関数呼び出しはかなり高速です。

于 2010-12-07T03:11:02.127 に答える
2

それは(一種の)ハッキングで実行可能です...

基本的に、このプロセスは、最初の計算後に値を返さないことです。むしろ、ある時点で値を計算するという約束を返すことです。

したがってa + b、実行する計算を表すオブジェクトを返します(ただし、実際には計算を実行しません)。これを呼び出します(+ a b)

次に、次の加算を(+ a b) + c評価する場合、どちらがに評価されるかという(+ a b c)ようになります。

結果のプロパティにアクセスした場合にのみ、実際に計算を実行します。

于 2010-12-07T03:23:14.367 に答える
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 に答える