• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`operator` --- Standard operators as functions
2===================================================
3
4.. module:: operator
5   :synopsis: Functions corresponding to the standard operators.
6.. sectionauthor:: Skip Montanaro <skip@automatrix.com>
7
8
9.. testsetup::
10
11   import operator
12   from operator import itemgetter
13
14
15The :mod:`operator` module exports a set of efficient functions corresponding to
16the intrinsic operators of Python.  For example, ``operator.add(x, y)`` is
17equivalent to the expression ``x+y``.  The function names are those used for
18special class methods; variants without leading and trailing ``__`` are also
19provided for convenience.
20
21The functions fall into categories that perform object comparisons, logical
22operations, mathematical operations, sequence operations, and abstract type
23tests.
24
25The object comparison functions are useful for all objects, and are named after
26the rich comparison operators they support:
27
28
29.. function:: lt(a, b)
30              le(a, b)
31              eq(a, b)
32              ne(a, b)
33              ge(a, b)
34              gt(a, b)
35              __lt__(a, b)
36              __le__(a, b)
37              __eq__(a, b)
38              __ne__(a, b)
39              __ge__(a, b)
40              __gt__(a, b)
41
42   Perform "rich comparisons" between *a* and *b*. Specifically, ``lt(a, b)`` is
43   equivalent to ``a < b``, ``le(a, b)`` is equivalent to ``a <= b``, ``eq(a,
44   b)`` is equivalent to ``a == b``, ``ne(a, b)`` is equivalent to ``a != b``,
45   ``gt(a, b)`` is equivalent to ``a > b`` and ``ge(a, b)`` is equivalent to ``a
46   >= b``.  Note that unlike the built-in :func:`cmp`, these functions can
47   return any value, which may or may not be interpretable as a Boolean value.
48   See :ref:`comparisons` for more information about rich comparisons.
49
50   .. versionadded:: 2.2
51
52The logical operations are also generally applicable to all objects, and support
53truth tests, identity tests, and boolean operations:
54
55
56.. function:: not_(obj)
57              __not__(obj)
58
59   Return the outcome of :keyword:`not` *obj*.  (Note that there is no
60   :meth:`__not__` method for object instances; only the interpreter core defines
61   this operation.  The result is affected by the :meth:`__nonzero__` and
62   :meth:`__len__` methods.)
63
64
65.. function:: truth(obj)
66
67   Return :const:`True` if *obj* is true, and :const:`False` otherwise.  This is
68   equivalent to using the :class:`bool` constructor.
69
70
71.. function:: is_(a, b)
72
73   Return ``a is b``.  Tests object identity.
74
75   .. versionadded:: 2.3
76
77
78.. function:: is_not(a, b)
79
80   Return ``a is not b``.  Tests object identity.
81
82   .. versionadded:: 2.3
83
84The mathematical and bitwise operations are the most numerous:
85
86
87.. function:: abs(obj)
88              __abs__(obj)
89
90   Return the absolute value of *obj*.
91
92
93.. function:: add(a, b)
94              __add__(a, b)
95
96   Return ``a + b``, for *a* and *b* numbers.
97
98
99.. function:: and_(a, b)
100              __and__(a, b)
101
102   Return the bitwise and of *a* and *b*.
103
104
105.. function:: div(a, b)
106              __div__(a, b)
107
108   Return ``a / b`` when ``__future__.division`` is not in effect.  This is
109   also known as "classic" division.
110
111
112.. function:: floordiv(a, b)
113              __floordiv__(a, b)
114
115   Return ``a // b``.
116
117   .. versionadded:: 2.2
118
119
120.. function:: index(a)
121              __index__(a)
122
123   Return *a* converted to an integer.  Equivalent to ``a.__index__()``.
124
125   .. versionadded:: 2.5
126
127
128.. function:: inv(obj)
129              invert(obj)
130              __inv__(obj)
131              __invert__(obj)
132
133   Return the bitwise inverse of the number *obj*.  This is equivalent to ``~obj``.
134
135   .. versionadded:: 2.0
136      The names :func:`invert` and :func:`__invert__`.
137
138
139.. function:: lshift(a, b)
140              __lshift__(a, b)
141
142   Return *a* shifted left by *b*.
143
144
145.. function:: mod(a, b)
146              __mod__(a, b)
147
148   Return ``a % b``.
149
150
151.. function:: mul(a, b)
152              __mul__(a, b)
153
154   Return ``a * b``, for *a* and *b* numbers.
155
156
157.. function:: neg(obj)
158              __neg__(obj)
159
160   Return *obj* negated (``-obj``).
161
162
163.. function:: or_(a, b)
164              __or__(a, b)
165
166   Return the bitwise or of *a* and *b*.
167
168
169.. function:: pos(obj)
170              __pos__(obj)
171
172   Return *obj* positive (``+obj``).
173
174
175.. function:: pow(a, b)
176              __pow__(a, b)
177
178   Return ``a ** b``, for *a* and *b* numbers.
179
180   .. versionadded:: 2.3
181
182
183.. function:: rshift(a, b)
184              __rshift__(a, b)
185
186   Return *a* shifted right by *b*.
187
188
189.. function:: sub(a, b)
190              __sub__(a, b)
191
192   Return ``a - b``.
193
194
195.. function:: truediv(a, b)
196              __truediv__(a, b)
197
198   Return ``a / b`` when ``__future__.division`` is in effect.  This is also
199   known as "true" division.
200
201   .. versionadded:: 2.2
202
203
204.. function:: xor(a, b)
205              __xor__(a, b)
206
207   Return the bitwise exclusive or of *a* and *b*.
208
209
210Operations which work with sequences (some of them with mappings too) include:
211
212.. function:: concat(a, b)
213              __concat__(a, b)
214
215   Return ``a + b`` for *a* and *b* sequences.
216
217
218.. function:: contains(a, b)
219              __contains__(a, b)
220
221   Return the outcome of the test ``b in a``. Note the reversed operands.
222
223   .. versionadded:: 2.0
224      The name :func:`__contains__`.
225
226
227.. function:: countOf(a, b)
228
229   Return the number of occurrences of *b* in *a*.
230
231
232.. function:: delitem(a, b)
233              __delitem__(a, b)
234
235   Remove the value of *a* at index *b*.
236
237
238.. function:: delslice(a, b, c)
239              __delslice__(a, b, c)
240
241   Delete the slice of *a* from index *b* to index *c-1*.
242
243   .. deprecated:: 2.6
244      This function is removed in Python 3.x.  Use :func:`delitem` with a slice
245      index.
246
247
248.. function:: getitem(a, b)
249              __getitem__(a, b)
250
251   Return the value of *a* at index *b*.
252
253
254.. function:: getslice(a, b, c)
255              __getslice__(a, b, c)
256
257   Return the slice of *a* from index *b* to index *c-1*.
258
259   .. deprecated:: 2.6
260      This function is removed in Python 3.x.  Use :func:`getitem` with a slice
261      index.
262
263
264.. function:: indexOf(a, b)
265
266   Return the index of the first of occurrence of *b* in *a*.
267
268
269.. function:: repeat(a, b)
270              __repeat__(a, b)
271
272   .. deprecated:: 2.7
273      Use :func:`__mul__` instead.
274
275   Return ``a * b`` where *a* is a sequence and *b* is an integer.
276
277
278.. function:: sequenceIncludes(...)
279
280   .. deprecated:: 2.0
281      Use :func:`contains` instead.
282
283   Alias for :func:`contains`.
284
285
286.. function:: setitem(a, b, c)
287              __setitem__(a, b, c)
288
289   Set the value of *a* at index *b* to *c*.
290
291
292.. function:: setslice(a, b, c, v)
293              __setslice__(a, b, c, v)
294
295   Set the slice of *a* from index *b* to index *c-1* to the sequence *v*.
296
297   .. deprecated:: 2.6
298      This function is removed in Python 3.x.  Use :func:`setitem` with a slice
299      index.
300
301Example use of operator functions::
302
303    >>> # Elementwise multiplication
304    >>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
305    [0, 20, 60, 120]
306
307    >>> # Dot product
308    >>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
309    200
310
311Many operations have an "in-place" version.  The following functions provide a
312more primitive access to in-place operators than the usual syntax does; for
313example, the :term:`statement` ``x += y`` is equivalent to
314``x = operator.iadd(x, y)``.  Another way to put it is to say that
315``z = operator.iadd(x, y)`` is equivalent to the compound statement
316``z = x; z += y``.
317
318.. function:: iadd(a, b)
319              __iadd__(a, b)
320
321   ``a = iadd(a, b)`` is equivalent to ``a += b``.
322
323   .. versionadded:: 2.5
324
325
326.. function:: iand(a, b)
327              __iand__(a, b)
328
329   ``a = iand(a, b)`` is equivalent to ``a &= b``.
330
331   .. versionadded:: 2.5
332
333
334.. function:: iconcat(a, b)
335              __iconcat__(a, b)
336
337   ``a = iconcat(a, b)`` is equivalent to ``a += b`` for *a* and *b* sequences.
338
339   .. versionadded:: 2.5
340
341
342.. function:: idiv(a, b)
343              __idiv__(a, b)
344
345   ``a = idiv(a, b)`` is equivalent to ``a /= b`` when ``__future__.division`` is
346   not in effect.
347
348   .. versionadded:: 2.5
349
350
351.. function:: ifloordiv(a, b)
352              __ifloordiv__(a, b)
353
354   ``a = ifloordiv(a, b)`` is equivalent to ``a //= b``.
355
356   .. versionadded:: 2.5
357
358
359.. function:: ilshift(a, b)
360              __ilshift__(a, b)
361
362   ``a = ilshift(a, b)`` is equivalent to ``a <<= b``.
363
364   .. versionadded:: 2.5
365
366
367.. function:: imod(a, b)
368              __imod__(a, b)
369
370   ``a = imod(a, b)`` is equivalent to ``a %= b``.
371
372   .. versionadded:: 2.5
373
374
375.. function:: imul(a, b)
376              __imul__(a, b)
377
378   ``a = imul(a, b)`` is equivalent to ``a *= b``.
379
380   .. versionadded:: 2.5
381
382
383.. function:: ior(a, b)
384              __ior__(a, b)
385
386   ``a = ior(a, b)`` is equivalent to ``a |= b``.
387
388   .. versionadded:: 2.5
389
390
391.. function:: ipow(a, b)
392              __ipow__(a, b)
393
394   ``a = ipow(a, b)`` is equivalent to ``a **= b``.
395
396   .. versionadded:: 2.5
397
398
399.. function:: irepeat(a, b)
400              __irepeat__(a, b)
401
402   .. deprecated:: 2.7
403      Use :func:`__imul__` instead.
404
405   ``a = irepeat(a, b)`` is equivalent to ``a *= b`` where *a* is a sequence and
406   *b* is an integer.
407
408   .. versionadded:: 2.5
409
410
411.. function:: irshift(a, b)
412              __irshift__(a, b)
413
414   ``a = irshift(a, b)`` is equivalent to ``a >>= b``.
415
416   .. versionadded:: 2.5
417
418
419.. function:: isub(a, b)
420              __isub__(a, b)
421
422   ``a = isub(a, b)`` is equivalent to ``a -= b``.
423
424   .. versionadded:: 2.5
425
426
427.. function:: itruediv(a, b)
428              __itruediv__(a, b)
429
430   ``a = itruediv(a, b)`` is equivalent to ``a /= b`` when ``__future__.division``
431   is in effect.
432
433   .. versionadded:: 2.5
434
435
436.. function:: ixor(a, b)
437              __ixor__(a, b)
438
439   ``a = ixor(a, b)`` is equivalent to ``a ^= b``.
440
441   .. versionadded:: 2.5
442
443
444The :mod:`operator` module also defines a few predicates to test the type of
445objects; however, these are not all reliable.  It is preferable to test
446abstract base classes instead (see :mod:`collections` and
447:mod:`numbers` for details).
448
449.. function:: isCallable(obj)
450
451   .. deprecated:: 2.0
452      Use ``isinstance(x, collections.Callable)`` instead.
453
454   Returns true if the object *obj* can be called like a function, otherwise it
455   returns false.  True is returned for functions, bound and unbound methods, class
456   objects, and instance objects which support the :meth:`__call__` method.
457
458
459.. function:: isMappingType(obj)
460
461   .. deprecated:: 2.7
462      Use ``isinstance(x, collections.Mapping)`` instead.
463
464   Returns true if the object *obj* supports the mapping interface. This is true for
465   dictionaries and all instance objects defining :meth:`__getitem__`.
466
467
468.. function:: isNumberType(obj)
469
470   .. deprecated:: 2.7
471      Use ``isinstance(x, numbers.Number)`` instead.
472
473   Returns true if the object *obj* represents a number.  This is true for all
474   numeric types implemented in C.
475
476
477.. function:: isSequenceType(obj)
478
479   .. deprecated:: 2.7
480      Use ``isinstance(x, collections.Sequence)`` instead.
481
482   Returns true if the object *obj* supports the sequence protocol. This returns true
483   for all objects which define sequence methods in C, and for all instance objects
484   defining :meth:`__getitem__`.
485
486
487The :mod:`operator` module also defines tools for generalized attribute and item
488lookups.  These are useful for making fast field extractors as arguments for
489:func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or other functions that
490expect a function argument.
491
492
493.. function:: attrgetter(attr)
494              attrgetter(*attrs)
495
496   Return a callable object that fetches *attr* from its operand.
497   If more than one attribute is requested, returns a tuple of attributes.
498   The attribute names can also contain dots. For example:
499
500   * After ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``.
501
502   * After ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns
503     ``(b.name, b.date)``.
504
505   * After ``f = attrgetter('name.first', 'name.last')``, the call ``f(b)``
506     returns ``(b.name.first, b.name.last)``.
507
508   Equivalent to::
509
510      def attrgetter(*items):
511          if len(items) == 1:
512              attr = items[0]
513              def g(obj):
514                  return resolve_attr(obj, attr)
515          else:
516              def g(obj):
517                  return tuple(resolve_attr(obj, attr) for attr in items)
518          return g
519
520      def resolve_attr(obj, attr):
521          for name in attr.split("."):
522              obj = getattr(obj, name)
523          return obj
524
525
526   .. versionadded:: 2.4
527
528   .. versionchanged:: 2.5
529      Added support for multiple attributes.
530
531   .. versionchanged:: 2.6
532      Added support for dotted attributes.
533
534
535.. function:: itemgetter(item)
536              itemgetter(*items)
537
538   Return a callable object that fetches *item* from its operand using the
539   operand's :meth:`__getitem__` method.  If multiple items are specified,
540   returns a tuple of lookup values.  For example:
541
542   * After ``f = itemgetter(2)``, the call ``f(r)`` returns ``r[2]``.
543
544   * After ``g = itemgetter(2, 5, 3)``, the call ``g(r)`` returns
545     ``(r[2], r[5], r[3])``.
546
547   Equivalent to::
548
549      def itemgetter(*items):
550          if len(items) == 1:
551              item = items[0]
552              def g(obj):
553                  return obj[item]
554          else:
555              def g(obj):
556                  return tuple(obj[item] for item in items)
557          return g
558
559   The items can be any type accepted by the operand's :meth:`__getitem__`
560   method.  Dictionaries accept any hashable value.  Lists, tuples, and
561   strings accept an index or a slice:
562
563      >>> itemgetter(1)('ABCDEFG')
564      'B'
565      >>> itemgetter(1,3,5)('ABCDEFG')
566      ('B', 'D', 'F')
567      >>> itemgetter(slice(2,None))('ABCDEFG')
568      'CDEFG'
569
570   .. versionadded:: 2.4
571
572   .. versionchanged:: 2.5
573      Added support for multiple item extraction.
574
575   Example of using :func:`itemgetter` to retrieve specific fields from a
576   tuple record:
577
578      >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
579      >>> getcount = itemgetter(1)
580      >>> map(getcount, inventory)
581      [3, 2, 5, 1]
582      >>> sorted(inventory, key=getcount)
583      [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
584
585
586.. function:: methodcaller(name[, args...])
587
588   Return a callable object that calls the method *name* on its operand.  If
589   additional arguments and/or keyword arguments are given, they will be given
590   to the method as well.  For example:
591
592   * After ``f = methodcaller('name')``, the call ``f(b)`` returns ``b.name()``.
593
594   * After ``f = methodcaller('name', 'foo', bar=1)``, the call ``f(b)``
595     returns ``b.name('foo', bar=1)``.
596
597   Equivalent to::
598
599      def methodcaller(name, *args, **kwargs):
600          def caller(obj):
601              return getattr(obj, name)(*args, **kwargs)
602          return caller
603
604   .. versionadded:: 2.6
605
606
607.. _operator-map:
608
609Mapping Operators to Functions
610------------------------------
611
612This table shows how abstract operations correspond to operator symbols in the
613Python syntax and the functions in the :mod:`operator` module.
614
615+-----------------------+-------------------------+---------------------------------------+
616| Operation             | Syntax                  | Function                              |
617+=======================+=========================+=======================================+
618| Addition              | ``a + b``               | ``add(a, b)``                         |
619+-----------------------+-------------------------+---------------------------------------+
620| Concatenation         | ``seq1 + seq2``         | ``concat(seq1, seq2)``                |
621+-----------------------+-------------------------+---------------------------------------+
622| Containment Test      | ``obj in seq``          | ``contains(seq, obj)``                |
623+-----------------------+-------------------------+---------------------------------------+
624| Division              | ``a / b``               | ``div(a, b)`` (without                |
625|                       |                         | ``__future__.division``)              |
626+-----------------------+-------------------------+---------------------------------------+
627| Division              | ``a / b``               | ``truediv(a, b)`` (with               |
628|                       |                         | ``__future__.division``)              |
629+-----------------------+-------------------------+---------------------------------------+
630| Division              | ``a // b``              | ``floordiv(a, b)``                    |
631+-----------------------+-------------------------+---------------------------------------+
632| Bitwise And           | ``a & b``               | ``and_(a, b)``                        |
633+-----------------------+-------------------------+---------------------------------------+
634| Bitwise Exclusive Or  | ``a ^ b``               | ``xor(a, b)``                         |
635+-----------------------+-------------------------+---------------------------------------+
636| Bitwise Inversion     | ``~ a``                 | ``invert(a)``                         |
637+-----------------------+-------------------------+---------------------------------------+
638| Bitwise Or            | ``a | b``               | ``or_(a, b)``                         |
639+-----------------------+-------------------------+---------------------------------------+
640| Exponentiation        | ``a ** b``              | ``pow(a, b)``                         |
641+-----------------------+-------------------------+---------------------------------------+
642| Identity              | ``a is b``              | ``is_(a, b)``                         |
643+-----------------------+-------------------------+---------------------------------------+
644| Identity              | ``a is not b``          | ``is_not(a, b)``                      |
645+-----------------------+-------------------------+---------------------------------------+
646| Indexed Assignment    | ``obj[k] = v``          | ``setitem(obj, k, v)``                |
647+-----------------------+-------------------------+---------------------------------------+
648| Indexed Deletion      | ``del obj[k]``          | ``delitem(obj, k)``                   |
649+-----------------------+-------------------------+---------------------------------------+
650| Indexing              | ``obj[k]``              | ``getitem(obj, k)``                   |
651+-----------------------+-------------------------+---------------------------------------+
652| Left Shift            | ``a << b``              | ``lshift(a, b)``                      |
653+-----------------------+-------------------------+---------------------------------------+
654| Modulo                | ``a % b``               | ``mod(a, b)``                         |
655+-----------------------+-------------------------+---------------------------------------+
656| Multiplication        | ``a * b``               | ``mul(a, b)``                         |
657+-----------------------+-------------------------+---------------------------------------+
658| Negation (Arithmetic) | ``- a``                 | ``neg(a)``                            |
659+-----------------------+-------------------------+---------------------------------------+
660| Negation (Logical)    | ``not a``               | ``not_(a)``                           |
661+-----------------------+-------------------------+---------------------------------------+
662| Positive              | ``+ a``                 | ``pos(a)``                            |
663+-----------------------+-------------------------+---------------------------------------+
664| Right Shift           | ``a >> b``              | ``rshift(a, b)``                      |
665+-----------------------+-------------------------+---------------------------------------+
666| Sequence Repetition   | ``seq * i``             | ``repeat(seq, i)``                    |
667+-----------------------+-------------------------+---------------------------------------+
668| Slice Assignment      | ``seq[i:j] = values``   | ``setitem(seq, slice(i, j), values)`` |
669+-----------------------+-------------------------+---------------------------------------+
670| Slice Deletion        | ``del seq[i:j]``        | ``delitem(seq, slice(i, j))``         |
671+-----------------------+-------------------------+---------------------------------------+
672| Slicing               | ``seq[i:j]``            | ``getitem(seq, slice(i, j))``         |
673+-----------------------+-------------------------+---------------------------------------+
674| String Formatting     | ``s % obj``             | ``mod(s, obj)``                       |
675+-----------------------+-------------------------+---------------------------------------+
676| Subtraction           | ``a - b``               | ``sub(a, b)``                         |
677+-----------------------+-------------------------+---------------------------------------+
678| Truth Test            | ``obj``                 | ``truth(obj)``                        |
679+-----------------------+-------------------------+---------------------------------------+
680| Ordering              | ``a < b``               | ``lt(a, b)``                          |
681+-----------------------+-------------------------+---------------------------------------+
682| Ordering              | ``a <= b``              | ``le(a, b)``                          |
683+-----------------------+-------------------------+---------------------------------------+
684| Equality              | ``a == b``              | ``eq(a, b)``                          |
685+-----------------------+-------------------------+---------------------------------------+
686| Difference            | ``a != b``              | ``ne(a, b)``                          |
687+-----------------------+-------------------------+---------------------------------------+
688| Ordering              | ``a >= b``              | ``ge(a, b)``                          |
689+-----------------------+-------------------------+---------------------------------------+
690| Ordering              | ``a > b``               | ``gt(a, b)``                          |
691+-----------------------+-------------------------+---------------------------------------+
692
693