operator モジュールは、Python 固有の各演算子に対応している
C 言語で実装された関数セットを提供します。例えば、
operator.add(x, y)
は式 x+y
と等価です。関数名は
特殊なクラスメソッドとして扱われます; 便宜上、先頭と末尾の "__"
を取り除いたものも提供されています。
これらの関数はそれぞれ、オブジェクトの比較、論理演算、数学演算、
シーケンス操作、および抽象型テストに分類されます。
オブジェクト比較関数は全てのオブジェクトで有効で、関数の名前は
サポートする大小比較演算子からとられています:
-
-
これらは a および b の大小比較を行います。
特に、
lt(a, b)
は a < b
、
le(a, b)
は a <= b
、
eq(a, b)
は a == b
、
ne(a, b)
は a != b
、
gt(a, b)
は a > b
、
そして
ge(a, b)
は a >= b
と等価です。
組み込み関数 cmp() と違って、これらの関数はどのような
値を返してもよく、ブール代数値として解釈できてもできなくても
かまいません。大小比較の詳細については
Python リファレンスマニュアル
を参照してください。
バージョン 2.2 で 新たに追加 された仕様です。
論理演算もまた全てのオブジェクトに対して適用することができ、
真値テスト、同一性テストおよびブール演算をサポートします:
-
-
not o の結果を返します。(オブジェクトのインスタンス
には __not__() メソッドは適用されないので注意してください;
この操作を定義しているのはインタプリタコアだけです。結果は
__nonzero__() および __len__() メソッドによって
影響されます。)
-
o が真の場合
True
を返し、そうでない場合 False
を返します。この関数はboolのコンストラクタ呼び出しと同等です。
-
a is b
を返します。オブジェクトの同一性をテストします。
-
a is not b
を返します。オブジェクトの同一性をテストします。
演算子で最も多いのは数学演算およびビット単位の演算です:
-
- o の絶対値を返します。
-
- 数値 a および b について a
+
b を
返します。
-
- a と b の論理積を返します。
-
__future__.division
が有効でない場合には a /
b
を返します。``古い(classic)'' 除算としても知られています。
-
- a
//
b を返します。
バージョン 2.2 で 新たに追加 された仕様です。
-
- o のビット単位反転を返します。
~
o と
同じです。Python 2.0 では名前 invert() および
__invert__() が追加されました。
-
- a の b ビット左シフトを返します。
-
- a
%
b を返します。
-
- 数値 a および b について a
*
b
を返します。
-
- o の符号反転を返します。
-
- a と b の論理和を返します。
-
- o の符号非反転を返します。
-
- 数値 a および b について a
**
b
を返します。
バージョン 2.3 で 新たに追加 された仕様です。
-
- a の b ビット右シフトを返します。
-
- a
-
b を返します。
-
__future__.division
が有効な場合 a /
b
を返します。除算としても知られています。
バージョン 2.2 で 新たに追加 された仕様です。
-
- a および b の排他的論理和を返します
シーケンスを扱う演算子には以下のようなものがあります:
-
- シーケンス a および b について a
+
b
を返します。
-
- b
in
a を調べた結果を返します。
演算子が反転しているので注意してください。関数名
__contains__() は Python 2.0 で追加されました。
-
a の中に b が出現する回数を返します。
-
- a でインデクスが b の要素を削除します。
-
- a でインデクスが b から c
-1
のスライス要素を
削除します。
-
- a でインデクスが b の要素を削除します。
Return the value of a at index b.
-
- a でインデクスが b から c
-1
のスライス要素を
返します。
-
a で最初に b が出現する場所のインデクスを返します。
-
- シーケンス a と整数 b について a
*
b
を返します。
-
リリース 2.0 で撤廃されました。
contains() を使ってください。
contains() の別名です。
-
- a でインデクスが b の要素の値を c に設定します。
-
__setslice__( |
a, b, c, v) |
- a でインデクスが b から c
-1
のスライス要素の
値をシーケンス v に設定します。
operator モジュールでは、オブジェクトの型を調べるための
述語演算子も定義しています。注意:
これらの関数が返す結果について
誤って理解しないよう注意してください; インスタンスオブジェクトに
対して常に信頼できる値を返すのは isCallable()
だけです。例えば以下のようになります:
>>> class C:
... pass
...
>>> import operator
>>> o = C()
>>> operator.isMappingType(o)
True
-
リリース 2.0 で撤廃されました。
callable() を使ってください。
オブジェクト o を関数のように呼び出すことができる場合真を
返し、それ以外の場合 false を返します。関数、バインドおよび非バインド
メソッド、クラスオブジェクト、および __call__() メソッド
をサポートするインスタンスオブジェクトは真を返します。
-
オブジェクト o がマップ型インタフェースをサポートする場合に
真を返します。辞書および全てのインスタンスオブジェクトに対しては、
この値は真になります。警告:
インタフェース自体が誤った定義に
なっているため、あるインスタンスが完全なマップ型プロトコルを備えて
いるかを調べる信頼性のある方法は存在しません。このため、この関数
によるテストはさほど便利ではありません。
-
オブジェクト o が数値を表現している場合に真を返します。
C で実装された全ての数値型、およびそれらのインスタンスオブジェクト
全て対して、この値は真になります。警告:
インタフェース自体が
誤った定義になっているため、あるインスタンスが完全な数値型の
インタフェースをサポートしているかを調べる信頼性のある方法は存在
しません。このため、この関数によるテストはさほど便利ではありません。
-
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(),
や関数を引数に取るその他の関数に対して高速にフィールドを抽出する際に
引数として使うと便利です。
-
演算子から attr を取得する呼び出し可能なオブジェクトを返します。
"f=attrgetter('name')" とした後で、"f(b)" を呼び出すと
"b.name" を返します。
バージョン 2.4 で 新たに追加 された仕様です。
-
演算子から 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)]
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。