Pythonのインプレース演算子ixor()・iand()・ipow()の使い方を徹底解説
はじめに
本記事では、Python 3.xで利用できるインプレース演算子(inplace operators)の一部について解説します。
Pythonでは、標準ライブラリの「operator」モジュールを利用することで、代入と計算を1つのステートメントで同時に行う「インプレース操作」を実現できます。ここでは、その中からixor()、iand()、ipow()の3つの関数を取り上げ、それぞれの使い方と実装例を見ていきましょう。
ixor() ― 排他的論理和(XOR)のインプレース演算
ixor()は、現在の値に対してXOR(排他的論理和)を計算し、その結果を代入する関数です。動作は「a ^= b」と同等です。なお、文字列やタプルといったイミュータブル(変更不可)なデータ型に対しては、代入を行うことができません。
サンプルコード
import operator as op
# ixor() を使って XOR 演算を行う
int1 = op.ixor(786, 12)
# 結果を表示
print("The value : ", end="")
print(int1)
実行結果
The value : 798
786 と 12 のXORを取ると 798 になります。このように、複合代入演算子「^=」とまったく同じ結果を、関数形式で得ることができます。
iand() ― ビットごとの論理積(AND)のインプレース演算
iand()は、現在の値に対してビット単位のAND(論理積)を計算し、その結果を代入する関数です。動作は「a &= b」と同等で、こちらも文字列やタプルなどイミュータブルなデータ型への代入は行えません。
サンプルコード
# iand() を使ってビットごとの AND 演算を行う
int2 = op.iand(57, 34)
print("The value : ", end="")
print(int2)
実行結果
The value : 32
57 と 34 の両方で共通して立っているビットだけが残るため、結果は 32 となります。
ipow() ― べき乗のインプレース演算
ipow()は、現在の値を指定した数でべき乗し、その結果を代入する関数です。動作は「a **= b」と同等です。イミュータブルなデータ型に対しては代入できない点は、他の関数と同様です。
サンプルコード
# ipow() を使ってべき乗を計算する
int2 = op.ipow(3, 2)
print("The value : ", end="")
print(int2)
実行結果
The value : 9
3 の 2 乗である 9 が出力されます。
まとめ
本記事では、Pythonのoperatorモジュールが提供するインプレース演算子のうち、ixor()(XOR)、iand()(AND)、ipow()(べき乗)の使い方と実装例を学びました。これらの関数は、それぞれ対応する複合代入演算子(^=、&=、**=)と同じ働きをするため、演算を関数オブジェクトとして扱いたい場面(map()やfunctools.reduce()などへの渡し)で特に役立ちます。
-
Pythonにおける比較演算子の連鎖(チェーン)の使い方を徹底解説
プログラミングをしていると、1つの条件式の中で複数の条件を同時にチェックしたい場面がよくあります。例えば「x < y < z」のような数学的な記法を使いたい場合や、「x < y かつ x < z」といった形で条件を組み合わせたい場合などです。 他の多くの言語と同様に、Pythonにも基本的な比較演算子が用意されています。具体的には、<、<=、>、>=、==、!=、is、is not、in、not in の各演算子です。 これらの比較演算子はすべて同じ優先順位を持っており、その優先順位は算術演算子・ビット演算子・シフト演算子よりも低く設定されて
-
Pythonのセット(集合)操作を徹底解説!主要メソッドと演算子の使い方
数学における集合(セット)とは、互いに異なるオブジェクトの集まりであり、それ自体が一つのオブジェクトとして扱われるものです。たとえば、2、4、6という数値は個別に見ればそれぞれ独立したオブジェクトですが、ひとまとめに考えればサイズ3の一つの集合「{2, 4, 6}」を形成します。 Pythonのセットには次のような特徴があります。 重複した要素を持たない 順序が定義されていない(インデックスによるアクセス不可) ミュータブル(frozensetを除く) 集合に対する基本的な演算 演算 記法 意味 積集合(共通部分) A ∩ B AとBの両方に含まれるすべての要素 和集合 A ∪