Movatterモバイル変換


[0]ホーム

URL:


Navigation

10.3.operator — Standard operators as functions

Theoperator module exports a set of efficient functions corresponding tothe intrinsic operators of Python. For example,operator.add(x,y) isequivalent to the expressionx+y. The function names are those used forspecial class methods; variants without leading and trailing__ are alsoprovided for convenience.

The functions fall into categories that perform object comparisons, logicaloperations, mathematical operations and sequence operations.

The object comparison functions are useful for all objects, and are named afterthe rich comparison operators they support:

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

Perform “rich comparisons” betweena andb. Specifically,lt(a,b) isequivalent toa<b,le(a,b) is equivalent toa<=b,eq(a,b) is equivalent toa==b,ne(a,b) is equivalent toa!=b,gt(a,b) is equivalent toa>b andge(a,b) is equivalent toa>=b. Note that these functions can return any value, which mayor may not be interpretable as a Boolean value. SeeComparisons for more information about rich comparisons.

The logical operations are also generally applicable to all objects, and supporttruth tests, identity tests, and boolean operations:

operator.not_(obj)
operator.__not__(obj)

Return the outcome ofnotobj. (Note that there is no__not__() method for object instances; only the interpreter core definesthis operation. The result is affected by the__bool__() and__len__() methods.)

operator.truth(obj)

ReturnTrue ifobj is true, andFalse otherwise. This isequivalent to using thebool constructor.

operator.is_(a,b)

Returnaisb. Tests object identity.

operator.is_not(a,b)

Returnaisnotb. Tests object identity.

The mathematical and bitwise operations are the most numerous:

operator.abs(obj)
operator.__abs__(obj)

Return the absolute value ofobj.

operator.add(a,b)
operator.__add__(a,b)

Returna+b, fora andb numbers.

operator.and_(a,b)
operator.__and__(a,b)

Return the bitwise and ofa andb.

operator.floordiv(a,b)
operator.__floordiv__(a,b)

Returna//b.

operator.index(a)
operator.__index__(a)

Returna converted to an integer. Equivalent toa.__index__().

operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)

Return the bitwise inverse of the numberobj. This is equivalent to~obj.

operator.lshift(a,b)
operator.__lshift__(a,b)

Returna shifted left byb.

operator.mod(a,b)
operator.__mod__(a,b)

Returna%b.

operator.mul(a,b)
operator.__mul__(a,b)

Returna*b, fora andb numbers.

operator.neg(obj)
operator.__neg__(obj)

Returnobj negated (-obj).

operator.or_(a,b)
operator.__or__(a,b)

Return the bitwise or ofa andb.

operator.pos(obj)
operator.__pos__(obj)

Returnobj positive (+obj).

operator.pow(a,b)
operator.__pow__(a,b)

Returna**b, fora andb numbers.

operator.rshift(a,b)
operator.__rshift__(a,b)

Returna shifted right byb.

operator.sub(a,b)
operator.__sub__(a,b)

Returna-b.

operator.truediv(a,b)
operator.__truediv__(a,b)

Returna/b where 2/3 is .66 rather than 0. This is also known as“true” division.

operator.xor(a,b)
operator.__xor__(a,b)

Return the bitwise exclusive or ofa andb.

Operations which work with sequences (some of them with mappings too) include:

operator.concat(a,b)
operator.__concat__(a,b)

Returna+b fora andb sequences.

operator.contains(a,b)
operator.__contains__(a,b)

Return the outcome of the testbina. Note the reversed operands.

operator.countOf(a,b)

Return the number of occurrences ofb ina.

operator.delitem(a,b)
operator.__delitem__(a,b)

Remove the value ofa at indexb.

operator.getitem(a,b)
operator.__getitem__(a,b)

Return the value ofa at indexb.

operator.indexOf(a,b)

Return the index of the first of occurrence ofb ina.

operator.setitem(a,b,c)
operator.__setitem__(a,b,c)

Set the value ofa at indexb toc.

Example: Build a dictionary that maps the ordinals from0 to255 totheir character equivalents.

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

Theoperator module also defines tools for generalized attribute and itemlookups. These are useful for making fast field extractors as arguments formap(),sorted(),itertools.groupby(), or other functions thatexpect a function argument.

operator.attrgetter(attr)
operator.attrgetter(*attrs)

Return a callable object that fetchesattr from its operand.If more than one attribute is requested, returns a tuple of attributes.The attribute names can also contain dots. For example:

  • Afterf=attrgetter('name'), the callf(b) returnsb.name.
  • Afterf=attrgetter('name','date'), the callf(b) returns(b.name,b.date).
  • Afterf=attrgetter('name.first','name.last'), the callf(b)returns(b.name.first,b.name.last).

Equivalent to:

defattrgetter(*items):ifany(notisinstance(item,str)foriteminitems):raiseTypeError('attribute name must be a string')iflen(items)==1:attr=items[0]defg(obj):returnresolve_attr(obj,attr)else:defg(obj):returntuple(resolve_attr(obj,attr)forattrinitems)returngdefresolve_attr(obj,attr):fornameinattr.split("."):obj=getattr(obj,name)returnobj
operator.itemgetter(item)
operator.itemgetter(*items)

Return a callable object that fetchesitem from its operand using theoperand’s__getitem__() method. If multiple items are specified,returns a tuple of lookup values. For example:

  • Afterf=itemgetter(2), the callf(r) returnsr[2].
  • Afterg=itemgetter(2,5,3), the callg(r) returns(r[2],r[5],r[3]).

Equivalent to:

defitemgetter(*items):iflen(items)==1:item=items[0]defg(obj):returnobj[item]else:defg(obj):returntuple(obj[item]foriteminitems)returng

The items can be any type accepted by the operand’s__getitem__()method. Dictionaries accept any hashable value. Lists, tuples, andstrings accept an index or a slice:

>>>itemgetter(1)('ABCDEFG')'B'>>>itemgetter(1,3,5)('ABCDEFG')('B', 'D', 'F')>>>itemgetter(slice(2,None))('ABCDEFG')'CDEFG'

Example of usingitemgetter() to retrieve specific fields from atuple record:

>>>inventory=[('apple',3),('banana',2),('pear',5),('orange',1)]>>>getcount=itemgetter(1)>>>list(map(getcount,inventory))[3, 2, 5, 1]>>>sorted(inventory,key=getcount)[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.methodcaller(name[,args...])

Return a callable object that calls the methodname on its operand. Ifadditional arguments and/or keyword arguments are given, they will be givento the method as well. For example:

  • Afterf=methodcaller('name'), the callf(b) returnsb.name().
  • Afterf=methodcaller('name','foo',bar=1), the callf(b)returnsb.name('foo',bar=1).

Equivalent to:

defmethodcaller(name,*args,**kwargs):defcaller(obj):returngetattr(obj,name)(*args,**kwargs)returncaller

10.3.1. Mapping Operators to Functions

This table shows how abstract operations correspond to operator symbols in thePython syntax and the functions in theoperator module.

OperationSyntaxFunction
Additiona+badd(a,b)
Concatenationseq1+seq2concat(seq1,seq2)
Containment Testobjinseqcontains(seq,obj)
Divisiona/btruediv(a,b)
Divisiona//bfloordiv(a,b)
Bitwise Anda&band_(a,b)
Bitwise Exclusive Ora^bxor(a,b)
Bitwise Inversion~ainvert(a)
Bitwise Ora|bor_(a,b)
Exponentiationa**bpow(a,b)
Identityaisbis_(a,b)
Identityaisnotbis_not(a,b)
Indexed Assignmentobj[k]=vsetitem(obj,k,v)
Indexed Deletiondelobj[k]delitem(obj,k)
Indexingobj[k]getitem(obj,k)
Left Shifta<<blshift(a,b)
Moduloa%bmod(a,b)
Multiplicationa*bmul(a,b)
Negation (Arithmetic)-aneg(a)
Negation (Logical)notanot_(a)
Positive+apos(a)
Right Shifta>>brshift(a,b)
Slice Assignmentseq[i:j]=valuessetitem(seq,slice(i,j),values)
Slice Deletiondelseq[i:j]delitem(seq,slice(i,j))
Slicingseq[i:j]getitem(seq,slice(i,j))
String Formattings%objmod(s,obj)
Subtractiona-bsub(a,b)
Truth Testobjtruth(obj)
Orderinga<blt(a,b)
Orderinga<=ble(a,b)
Equalitya==beq(a,b)
Differencea!=bne(a,b)
Orderinga>=bge(a,b)
Orderinga>bgt(a,b)

10.3.2. Inplace Operators

Many operations have an “in-place” version. Listed below are functionsproviding a more primitive access to in-place operators than the usual syntaxdoes; for example, thestatementx+=y is equivalent tox=operator.iadd(x,y). Another way to put it is to say thatz=operator.iadd(x,y) is equivalent to the compound statementz=x;z+=y.

In those examples, note that when an in-place method is called, the computationand assignment are performed in two separate steps. The in-place functionslisted below only do the first step, calling the in-place method. The secondstep, assignment, is not handled.

For immutable targets such as strings, numbers, and tuples, the updatedvalue is computed, but not assigned back to the input variable:

>>>a='hello'>>>iadd(a,' world')'hello world'>>>a'hello'

For mutable targets such as lists and dictionaries, the inplace methodwill perform the update, so no subsequent assignment is necessary:

>>>s=['h','e','l','l','o']>>>iadd(s,[' ','w','o','r','l','d'])['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']>>>s['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
operator.iadd(a,b)
operator.__iadd__(a,b)

a=iadd(a,b) is equivalent toa+=b.

operator.iand(a,b)
operator.__iand__(a,b)

a=iand(a,b) is equivalent toa&=b.

operator.iconcat(a,b)
operator.__iconcat__(a,b)

a=iconcat(a,b) is equivalent toa+=b fora andb sequences.

operator.ifloordiv(a,b)
operator.__ifloordiv__(a,b)

a=ifloordiv(a,b) is equivalent toa//=b.

operator.ilshift(a,b)
operator.__ilshift__(a,b)

a=ilshift(a,b) is equivalent toa<<=b.

operator.imod(a,b)
operator.__imod__(a,b)

a=imod(a,b) is equivalent toa%=b.

operator.imul(a,b)
operator.__imul__(a,b)

a=imul(a,b) is equivalent toa*=b.

operator.ior(a,b)
operator.__ior__(a,b)

a=ior(a,b) is equivalent toa|=b.

operator.ipow(a,b)
operator.__ipow__(a,b)

a=ipow(a,b) is equivalent toa**=b.

operator.irshift(a,b)
operator.__irshift__(a,b)

a=irshift(a,b) is equivalent toa>>=b.

operator.isub(a,b)
operator.__isub__(a,b)

a=isub(a,b) is equivalent toa-=b.

operator.itruediv(a,b)
operator.__itruediv__(a,b)

a=itruediv(a,b) is equivalent toa/=b.

operator.ixor(a,b)
operator.__ixor__(a,b)

a=ixor(a,b) is equivalent toa^=b.

Table Of Contents

Previous topic

10.2.functools — Higher-order functions and operations on callable objects

Next topic

11. File and Directory Access

This Page

Quick search

Enter search terms or a module, class or function name.

Navigation

©Copyright 1990-2017, Python Software Foundation.
The Python Software Foundation is a non-profit corporation.Please donate.
Last updated on Sep 19, 2017.Found a bug?
Created usingSphinx 1.2.

[8]ページ先頭

©2009-2025 Movatter.jp