5.6 二項算術演算 (binary arithmetic operation)

二項算術演算は、慣習的な優先順位を踏襲しています。 演算子のいずれかは、特定の非数値型にも適用されるので注意して ください。べき乗 (power) 演算子を除き、演算子には二つのレベル、 すなわち乗算的 (multiplicatie) 演算子と加算的 (additie) 演算子 しかありません:

Download entire grammar as text.

* (乗算: multiplication) 演算は、引数間の積になります。 引数の組は、双方ともに数値型であるか、片方が整数 (通常の整数または 長整数) 型で他方がシーケンス型かのどちらかでなければなりません。 前者の場合、数値は共通の型に変換された後乗算されます。 後者の場合、シーケンスの繰り返し操作が行われます。繰り返し数を負に すると、空のシーケンスになります。

/ (除算: division) および // (切り捨て除算: floor division) は、引数間の商になります。数値引数はまず共通の型に変換されます。 整数または長整数の除算結果は、同じ型の整数になります; この場合、 結果は数学的な除算に関数 `floor' を適用したものになります。 ゼロによる除算を行うと ZeroDivisionError 例外を送出 します。

% (モジュロ: modulo) 演算は、第一引数を第二引数で除算 したときの剰余になります。数値引数はまず共通の型に変換されます。 右引数値がゼロの場合には、ZeroDivisionError 例外が 送出されます。引数値は浮動小数点でもよく。例えば 3.14%0.70.34 になります (3.144*0.7 + 0.34 だからです)。モジュロ演算子は常に第二引数と同じ符号 (またはゼロ) の結果になります; モジュロ演算の結果の絶対値は、常に第二引数 の絶対値よりも小さくなります。5.2

整数による除算演算やモジュロ演算は、恒等式: x == (x/y)*y + (x%y) と関係しています。整数除算や モジュロはまた、組み込み関数 divmod(): divmod(x, y) == (x/y, x%y) と関係しています。 これらの恒等関係は浮動小数点の場合には維持されません; x/yfloor(x/y)floor(x/y) - 1 に 置き換えられた場合、これらの恒等式は近似性を維持します。 5.3

数値に対するモジュロ演算の実行に加えて、% 演算子は 文字列 (string) とユニコードオブジェクトにオーバーロードされ、 文字列の書式化 (文字列の挿入としても知られる) を行います。 文字列の書式化の構文は Python ライブラリリファレンス の ``シーケンス型'' で説明されています。

リリース 2.3 で撤廃されました。 切り捨て除算演算子、モジュロ演算子、および divmod() 関数は、複素数に対してはもはや定義されて いません。目的に合うならば、代わりに abs() を使って 浮動小数点に変換してください。

+ (加算) 演算は、引数を加算した値を返します。 引数は双方とも数値型か、双方とも同じ型のシーケンスでなければなりません。 前者の場合、数値は共通の型に変換され、加算されます。 後者の場合、シーケンスは結合 (concatenate) されます。

- (減算) 演算は、引数間で減算を行った値を返します。 数値引数はまず共通の型に変換されます。



脚注

... の絶対値よりも小さくなります。5.2
abs(x%y) < abs(y) は数学的には真となりますが、浮動小数点 に対する演算の場合には、値丸め (roundoff) のために数値計算的に 真にならない場合があります。例えば、Python の浮動小数点型が IEEE754 倍精度数型になっているプラットフォームを仮定すると、 -1e-100 % 1e1001e100 と同じ符号になるはず なのに、計算結果は -1e-100 + 1e100 となります。これは 数値計算的には厳密に 1e100 と等価です。math モジュールの関数 fmod() は、最初の引数と符号が一致する ような値を返すので、上記の場合には -1e-100 を返します。 どちらのアプローチが適切かは、アプリケーションに依存します。
... 置き換えられた場合、これらの恒等式は近似性を維持します。5.3
x が y の整数倍に非常に近い場合、丸め誤差によって floor(x/y)(x-x%y)/y よりも大きな値になる可能性があります。 そのような場合、 Python はdivmod(x,y)[0] * y + x % yx に非常に近くなるという関係を保つために、後者の値を 返します。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。