3.10 operator -- 関数形式の標準演算子

operator モジュールは、Python 固有の各演算子に対応している C 言語で実装された関数セットを提供します。例えば、 operator.add(x, y) は式 x+y と等価です。関数名は 特殊なクラスメソッドとして扱われます; 便宜上、先頭と末尾の "__" を取り除いたものも提供されています。

これらの関数はそれぞれ、オブジェクトの比較、論理演算、数学演算、 シーケンス操作、および抽象型テストに分類されます。

オブジェクト比較関数は全てのオブジェクトで有効で、関数の名前は サポートする大小比較演算子からとられています:

lt( a, b)
le( a, b)
eq( a, b)
ne( a, b)
ge( a, b)
gt( a, b)
__lt__( a, b)
__le__( a, b)
__eq__( a, b)
__ne__( a, b)
__ge__( a, b)
__gt__( a, b)

これらは a および b の大小比較を行います。 特に、 lt(a, b)a < ble(a, b)a <= beq(a, b)a == bne(a, b)a != bgt(a, b)a > b、 そして ge(a, b)a >= b と等価です。

組み込み関数 cmp() と違って、これらの関数はどのような 値を返してもよく、ブール代数値として解釈できてもできなくても かまいません。大小比較の詳細については Python リファレンスマニュアル を参照してください。 バージョン 2.2 で 新たに追加 された仕様です。

論理演算もまた全てのオブジェクトに対して適用することができ、 真値テスト、同一性テストおよびブール演算をサポートします:

not_( o)
__not__( o)

not o の結果を返します。(オブジェクトのインスタンス には __not__() メソッドは適用されないので注意してください; この操作を定義しているのはインタプリタコアだけです。結果は __nonzero__() および __len__() メソッドによって 影響されます。)

truth( o)
o が真の場合 True を返し、そうでない場合 False を返します。この関数はboolのコンストラクタ呼び出しと同等です。

is_( a, b)
a is b を返します。オブジェクトの同一性をテストします。

is_not( a, b)
a is not b を返します。オブジェクトの同一性をテストします。

演算子で最も多いのは数学演算およびビット単位の演算です:

abs( o)
__abs__( o)
o の絶対値を返します。

add( a, b)
__add__( a, b)
数値 a および b について a + b を 返します。

and_( a, b)
__and__( a, b)
ab の論理積を返します。

div( a, b)
__div__( a, b)
__future__.division が有効でない場合には a / b を返します。``古い(classic)'' 除算としても知られています。

floordiv( a, b)
__floordiv__( a, b)
a // b を返します。 バージョン 2.2 で 新たに追加 された仕様です。

inv( o)
invert( o)
__inv__( o)
__invert__( o)
o のビット単位反転を返します。~o と 同じです。Python 2.0 では名前 invert() および __invert__() が追加されました。

lshift( a, b)
__lshift__( a, b)
ab ビット左シフトを返します。

mod( a, b)
__mod__( a, b)
a % b を返します。

mul( a, b)
__mul__( a, b)
数値 a および b について a * b を返します。

neg( o)
__neg__( o)
o の符号反転を返します。

or_( a, b)
__or__( a, b)
ab の論理和を返します。

pos( o)
__pos__( o)
o の符号非反転を返します。

pow( a, b)
__pow__( a, b)
数値 a および b について a ** b を返します。 バージョン 2.3 で 新たに追加 された仕様です。

rshift( a, b)
__rshift__( a, b)
ab ビット右シフトを返します。

sub( a, b)
__sub__( a, b)
a - b を返します。

truediv( a, b)
__truediv__( a, b)
__future__.division が有効な場合 a / b を返します。除算としても知られています。 バージョン 2.2 で 新たに追加 された仕様です。

xor( a, b)
__xor__( a, b)
a および b の排他的論理和を返します

シーケンスを扱う演算子には以下のようなものがあります:

concat( a, b)
__concat__( a, b)
シーケンス a および b について a + b を返します。

contains( a, b)
__contains__( a, b)
b in a を調べた結果を返します。 演算子が反転しているので注意してください。関数名 __contains__() は Python 2.0 で追加されました。

countOf( a, b)
a の中に b が出現する回数を返します。

delitem( a, b)
__delitem__( a, b)
a でインデクスが b の要素を削除します。

delslice( a, b, c)
__delslice__( a, b, c)
a でインデクスが b から c-1 のスライス要素を 削除します。

getitem( a, b)
__getitem__( a, b)
a でインデクスが b の要素を削除します。 Return the value of a at index b.

getslice( a, b, c)
__getslice__( a, b, c)
a でインデクスが b から c-1 のスライス要素を 返します。

indexOf( a, b)
a で最初に b が出現する場所のインデクスを返します。

repeat( a, b)
__repeat__( a, b)
シーケンス a と整数 b について a * b を返します。

sequenceIncludes( ...)
リリース 2.0 で撤廃されました。 contains() を使ってください。

contains() の別名です。

setitem( a, b, c)
__setitem__( a, b, c)
a でインデクスが b の要素の値を c に設定します。

setslice( a, b, c, v)
__setslice__( a, b, c, v)
a でインデクスが b から c-1 のスライス要素の 値をシーケンス v に設定します。

operator モジュールでは、オブジェクトの型を調べるための 述語演算子も定義しています。注意: これらの関数が返す結果について 誤って理解しないよう注意してください; インスタンスオブジェクトに 対して常に信頼できる値を返すのは isCallable() だけです。例えば以下のようになります:

>>> class C:
...     pass
... 
>>> import operator
>>> o = C()
>>> operator.isMappingType(o)
True

isCallable( o)
リリース 2.0 で撤廃されました。 callable() を使ってください。

オブジェクト o を関数のように呼び出すことができる場合真を 返し、それ以外の場合 false を返します。関数、バインドおよび非バインド メソッド、クラスオブジェクト、および __call__() メソッド をサポートするインスタンスオブジェクトは真を返します。

isMappingType( o)
オブジェクト o がマップ型インタフェースをサポートする場合に 真を返します。辞書および全てのインスタンスオブジェクトに対しては、 この値は真になります。警告: インタフェース自体が誤った定義に なっているため、あるインスタンスが完全なマップ型プロトコルを備えて いるかを調べる信頼性のある方法は存在しません。このため、この関数 によるテストはさほど便利ではありません。

isNumberType( o)
オブジェクト o が数値を表現している場合に真を返します。 C で実装された全ての数値型、およびそれらのインスタンスオブジェクト 全て対して、この値は真になります。警告: インタフェース自体が 誤った定義になっているため、あるインスタンスが完全な数値型の インタフェースをサポートしているかを調べる信頼性のある方法は存在 しません。このため、この関数によるテストはさほど便利ではありません。

isSequenceType( o)
o がシーケンス型プロトコルをサポートする場合に真を返します。 シーケンス型メソッドを C で定義している全てのオブジェクトに対して、この値 は真になります。 警告: インタフェース自体が 誤った定義になっているため、あるインスタンスが完全なシーケンス型の インタフェースをサポートしているかを調べる信頼性のある方法は存在 しません。このため、この関数によるテストはさほど便利ではありません。

例: 0 から 255 までの序数を文字に対応付ける 辞書を構築します。

>>> import operator
>>> d = {}
>>> keys = range(256)
>>> vals = map(chr, keys)
>>> map(operator.setitem, [d]*len(keys), keys, vals)

operator モジュールはアトリビュートとアイテムの汎用的な検索 のための道具も定義しています。 map(), sorted(), itertools.groupby(), や関数を引数に取るその他の関数に対して高速にフィールドを抽出する際に 引数として使うと便利です。

attrgetter( attr)
演算子から attr を取得する呼び出し可能なオブジェクトを返します。 "f=attrgetter('name')" とした後で、"f(b)" を呼び出すと "b.name" を返します。

バージョン 2.4 で 新たに追加 された仕様です。

itemgetter( item)
演算子から item を取得する呼び出し可能なオブジェクトを返します。 "f=itemgetter(2)" とした後で, "f(b)" を呼び出すと "b[2]" を返します。

バージョン 2.4 で 新たに追加 された仕様です。

例:

>>> from operator import *
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
>>> getcount = itemgetter(1)
>>> map(getcount, inventory)
[3, 2, 5, 1]
>>> sorted(inventory, key=getcount)
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。