【徹底解説】Pythonのインプレース演算子と標準演算子の基本
Pythonにおけるインプレース演算子とは
インプレース演算(in-place operation)とは、データのコピーを作成せずに、変数やオブジェクトの内容を直接変更する操作のことです。このような操作を実現するための演算子を「インプレース演算子」と呼びます。
まずは簡単な例から見ていきましょう。
a = 9 a += 2 print(a)
出力
11
上記の例では、+=がインプレース演算子として機能しています。変数aに2が加算され、その結果で元の値が直接更新されます。
この仕組みは他の演算子にも同様に適用できます。代表的なインプレース演算子は以下の通りです。
+=-=*=/=%=
また、これらの演算子は数値以外にも使えます。例えば文字列の場合は次のようになります。
language = "Python" language += "3" print(language)
出力
Python3
つまり、x += yという式は、x = operator.iadd(x, y)と等価です。Pythonでは、これらのインプレース操作に対応する関数がoperatorモジュールとして複数用意されています。
iadd()
現在の値に対して加算を行う関数です。x += yと同じ動作をします。
x = operator.iadd(9, 18)
print("Result after adding: ", end="")
print(x)実行結果
Result after adding: 27
isub()
現在の値に対して減算を行う関数です。x -= yと同じ動作をします。
x = operator.isub(9, 18)
print("Result after subtraction: ", end="")
print(x)実行結果
Result after subtraction: -9
imul()
現在の値に対して乗算を行う関数です。x *= yと同じ動作をします。
x = operator.imul(9, 18)
print("Result after multiplying: ", end="")
print(x)実行結果
Result after multiplying: 162
itruediv()
現在の値に対して除算(真の割り算)を行う関数です。x /= yと同じ動作をします。
x = operator.itruediv(9, 18)
print("Result after dividing: ", end="")
print(x)実行結果
Result after dividing: 0.5
imod()
現在の値に対して剰余計算(余りの取得)を行う関数です。x %= yと同じ動作をします。
x = operator.imod(9, 18)
print("Result after modulus: ", end="")
print(x)実行結果
Result after modulus: 9
iconcat()
2つの文字列(またはシーケンス)を連結するための関数です。
x = "Tutorials"
y = "Point"
str1 = operator.iconcat(x, y)
print("After concatenation : ", end="")
print(str1)実行結果
After concatenation : TutorialsPoint
ipow()
べき乗計算を行う関数で、x **= yと等価です。
x = operator.ipow(2, 6)
print("Result after exponent: ", end="")
print(x)実行結果
Result after exponent: 64
標準演算子とは
演算子とは、オペランド(被演算子)の値を操作するための構文要素です。
例えば、9 + 18 = 27という式では、「9」と「18」がオペランドであり、「+」が演算子と呼ばれます。
演算子の種類
Pythonでは以下の種類の演算子がサポートされています。
- 算術演算子:例:
+,-,*,/,%,**,// - 比較演算子:例:
==,!=,<>,>,<,>=,<= - 代入演算子:例:
=,+=,-=,*=,/=,%=,**=,//= - 論理演算子:例:
and(論理AND)、or(論理OR)、not(論理NOT) - ビット演算子:例:
|,&,^,~,<<,>> - メンバーシップ演算子:例:
in,not in - 同一性演算子:例:
is,is not
演算子と関数の対応表
以下の表は、抽象的な演算がPythonの構文上の演算子記号と、operatorモジュールの関数にどのように対応しているかを示したものです。
| 演算 | 構文 | 関数 |
|---|---|---|
| 加算 | x + y | add(x, y) |
| 連結 | seq1 + seq2 | concat(seq1, seq2) |
| 所属判定 | obj in seq | contains(seq, obj) |
| 除算 | x / y | truediv(x, y) |
| 切り捨て除算 | x // y | floordiv(x, y) |
| ビット単位AND | x & y | and_(x, y) |
| ビット単位XOR | x ^ y | xor(x, y) |
| ビット反転 | ~x | invert(x) |
| ビット単位OR | x | y | or_(x, y) |
| べき乗 | x ** y | pow(x, y) |
| 同一性 | x is y | is_(x, y) |
| 同一性(否定) | x is not y | is_not(x, y) |
| インデックス代入 | obj[k] = v | setitem(obj, k, v) |
| インデックス削除 | del obj[k] | delitem(obj, k) |
| インデックス参照 | obj[k] | getitem(obj, k) |
| 左シフト | a << b | lshift(a, b) |
| 剰余 | a % b | mod(a, b) |
| 乗算 | x * y | mul(x, y) |
| 行列乗算 | x @ y | matmul(x, y) |
| 算術否定 | -a | neg(a) |
| 論理否定 | not a | not_(a) |
| 正号 | +a | pos(a) |
| 右シフト | a >> b | rshift(a, b) |
| スライス代入 | seq[i:j] = values | setitem(seq, slice(i, j), values) |
| スライス削除 | del seq[i:j] | delitem(seq, slice(i, j)) |
| スライス | seq[i:j] | getitem(seq, slice(i, j)) |
| 文字列フォーマット | s % obj | mod(s, obj) |
| 減算 | a - b | sub(a, b) |
| 真値判定 | obj | truth(obj) |
| 順序比較(小なり) | a < b | lt(a, b) |
| 順序比較(以下) | a <= b | le(a, b) |
| 等価 | a == b | eq(a, b) |
| 不等価 | a != b | ne(a, b) |
| 順序比較(以上) | a >= b | ge(a, b) |
| 順序比較(大なり) | a > b | gt(a, b) |
-
Pythonのoperatorモジュール徹底解説:標準演算子を関数として使う方法
はじめにプログラミングにおける「演算子(オペレーター)」とは、加算・減算・比較などの特定の操作を実行するためにあらかじめ定義された記号(キー)のことです。Pythonには、算術演算、比較、ビット演算、メンバーシップ判定など、カテゴリ別に分類された豊富な組み込み演算子が用意されています。Pythonの標準ライブラリにはoperatorモジュールが含まれており、このモジュールは組み込み演算子に対応する関数を提供します。関数名は対応する演算子の種類に沿って命名されており、例えば + 演算子に対応するのが add() 関数です。ダンダーメソッドとの関係PythonのObjectクラスには、各演算子記号
-
Pythonにおける比較演算子の連鎖(チェーン)の使い方を徹底解説
プログラミングをしていると、1つの条件式の中で複数の条件を同時にチェックしたい場面がよくあります。例えば「x < y < z」のような数学的な記法を使いたい場合や、「x < y かつ x < z」といった形で条件を組み合わせたい場合などです。 他の多くの言語と同様に、Pythonにも基本的な比較演算子が用意されています。具体的には、<、<=、>、>=、==、!=、is、is not、in、not in の各演算子です。 これらの比較演算子はすべて同じ優先順位を持っており、その優先順位は算術演算子・ビット演算子・シフト演算子よりも低く設定されて