• 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
7.. sectionauthor:: Skip Montanaro <skip@automatrix.com>
8
9**Source code:** :source:`Lib/operator.py`
10
11.. testsetup::
12
13   import operator
14   from operator import itemgetter, iadd
15
16--------------
17
18The :mod:`operator` module exports a set of efficient functions corresponding to
19the intrinsic operators of Python.  For example, ``operator.add(x, y)`` is
20equivalent to the expression ``x+y``. Many function names are those used for
21special methods, without the double underscores.  For backward compatibility,
22many of these have a variant with the double underscores kept. The variants
23without the double underscores are preferred for clarity.
24
25The functions fall into categories that perform object comparisons, logical
26operations, mathematical operations and sequence operations.
27
28The object comparison functions are useful for all objects, and are named after
29the rich comparison operators they support:
30
31
32.. function:: lt(a, b)
33              le(a, b)
34              eq(a, b)
35              ne(a, b)
36              ge(a, b)
37              gt(a, b)
38              __lt__(a, b)
39              __le__(a, b)
40              __eq__(a, b)
41              __ne__(a, b)
42              __ge__(a, b)
43              __gt__(a, b)
44
45   Perform "rich comparisons" between *a* and *b*. Specifically, ``lt(a, b)`` is
46   equivalent to ``a < b``, ``le(a, b)`` is equivalent to ``a <= b``, ``eq(a,
47   b)`` is equivalent to ``a == b``, ``ne(a, b)`` is equivalent to ``a != b``,
48   ``gt(a, b)`` is equivalent to ``a > b`` and ``ge(a, b)`` is equivalent to ``a
49   >= b``.  Note that these functions can return any value, which may
50   or may not be interpretable as a Boolean value.  See
51   :ref:`comparisons` for more information about rich comparisons.
52
53
54The logical operations are also generally applicable to all objects, and support
55truth tests, identity tests, and boolean operations:
56
57
58.. function:: not_(obj)
59              __not__(obj)
60
61   Return the outcome of :keyword:`not` *obj*.  (Note that there is no
62   :meth:`__not__` method for object instances; only the interpreter core defines
63   this operation.  The result is affected by the :meth:`__bool__` and
64   :meth:`__len__` methods.)
65
66
67.. function:: truth(obj)
68
69   Return :const:`True` if *obj* is true, and :const:`False` otherwise.  This is
70   equivalent to using the :class:`bool` constructor.
71
72
73.. function:: is_(a, b)
74
75   Return ``a is b``.  Tests object identity.
76
77
78.. function:: is_not(a, b)
79
80   Return ``a is not b``.  Tests object identity.
81
82
83The mathematical and bitwise operations are the most numerous:
84
85
86.. function:: abs(obj)
87              __abs__(obj)
88
89   Return the absolute value of *obj*.
90
91
92.. function:: add(a, b)
93              __add__(a, b)
94
95   Return ``a + b``, for *a* and *b* numbers.
96
97
98.. function:: and_(a, b)
99              __and__(a, b)
100
101   Return the bitwise and of *a* and *b*.
102
103
104.. function:: floordiv(a, b)
105              __floordiv__(a, b)
106
107   Return ``a // b``.
108
109
110.. function:: index(a)
111              __index__(a)
112
113   Return *a* converted to an integer.  Equivalent to ``a.__index__()``.
114
115   .. versionchanged:: 3.10
116      The result always has exact type :class:`int`.  Previously, the result
117      could have been an instance of a subclass of ``int``.
118
119
120.. function:: inv(obj)
121              invert(obj)
122              __inv__(obj)
123              __invert__(obj)
124
125   Return the bitwise inverse of the number *obj*.  This is equivalent to ``~obj``.
126
127
128.. function:: lshift(a, b)
129              __lshift__(a, b)
130
131   Return *a* shifted left by *b*.
132
133
134.. function:: mod(a, b)
135              __mod__(a, b)
136
137   Return ``a % b``.
138
139
140.. function:: mul(a, b)
141              __mul__(a, b)
142
143   Return ``a * b``, for *a* and *b* numbers.
144
145
146.. function:: matmul(a, b)
147              __matmul__(a, b)
148
149   Return ``a @ b``.
150
151   .. versionadded:: 3.5
152
153
154.. function:: neg(obj)
155              __neg__(obj)
156
157   Return *obj* negated (``-obj``).
158
159
160.. function:: or_(a, b)
161              __or__(a, b)
162
163   Return the bitwise or of *a* and *b*.
164
165
166.. function:: pos(obj)
167              __pos__(obj)
168
169   Return *obj* positive (``+obj``).
170
171
172.. function:: pow(a, b)
173              __pow__(a, b)
174
175   Return ``a ** b``, for *a* and *b* numbers.
176
177
178.. function:: rshift(a, b)
179              __rshift__(a, b)
180
181   Return *a* shifted right by *b*.
182
183
184.. function:: sub(a, b)
185              __sub__(a, b)
186
187   Return ``a - b``.
188
189
190.. function:: truediv(a, b)
191              __truediv__(a, b)
192
193   Return ``a / b`` where 2/3 is .66 rather than 0.  This is also known as
194   "true" division.
195
196
197.. function:: xor(a, b)
198              __xor__(a, b)
199
200   Return the bitwise exclusive or of *a* and *b*.
201
202
203Operations which work with sequences (some of them with mappings too) include:
204
205.. function:: concat(a, b)
206              __concat__(a, b)
207
208   Return ``a + b`` for *a* and *b* sequences.
209
210
211.. function:: contains(a, b)
212              __contains__(a, b)
213
214   Return the outcome of the test ``b in a``. Note the reversed operands.
215
216
217.. function:: countOf(a, b)
218
219   Return the number of occurrences of *b* in *a*.
220
221
222.. function:: delitem(a, b)
223              __delitem__(a, b)
224
225   Remove the value of *a* at index *b*.
226
227
228.. function:: getitem(a, b)
229              __getitem__(a, b)
230
231   Return the value of *a* at index *b*.
232
233
234.. function:: indexOf(a, b)
235
236   Return the index of the first of occurrence of *b* in *a*.
237
238
239.. function:: setitem(a, b, c)
240              __setitem__(a, b, c)
241
242   Set the value of *a* at index *b* to *c*.
243
244
245.. function:: length_hint(obj, default=0)
246
247   Return an estimated length for the object *obj*. First try to return its
248   actual length, then an estimate using :meth:`object.__length_hint__`, and
249   finally return the default value.
250
251   .. versionadded:: 3.4
252
253
254The following operation works with callables:
255
256.. function:: call(obj, /, *args, **kwargs)
257              __call__(obj, /, *args, **kwargs)
258
259   Return ``obj(*args, **kwargs)``.
260
261   .. versionadded:: 3.11
262
263
264The :mod:`operator` module also defines tools for generalized attribute and item
265lookups.  These are useful for making fast field extractors as arguments for
266:func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or other functions that
267expect a function argument.
268
269
270.. function:: attrgetter(attr)
271              attrgetter(*attrs)
272
273   Return a callable object that fetches *attr* from its operand.
274   If more than one attribute is requested, returns a tuple of attributes.
275   The attribute names can also contain dots. For example:
276
277   * After ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``.
278
279   * After ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns
280     ``(b.name, b.date)``.
281
282   * After ``f = attrgetter('name.first', 'name.last')``, the call ``f(b)``
283     returns ``(b.name.first, b.name.last)``.
284
285   Equivalent to::
286
287      def attrgetter(*items):
288          if any(not isinstance(item, str) for item in items):
289              raise TypeError('attribute name must be a string')
290          if len(items) == 1:
291              attr = items[0]
292              def g(obj):
293                  return resolve_attr(obj, attr)
294          else:
295              def g(obj):
296                  return tuple(resolve_attr(obj, attr) for attr in items)
297          return g
298
299      def resolve_attr(obj, attr):
300          for name in attr.split("."):
301              obj = getattr(obj, name)
302          return obj
303
304
305.. function:: itemgetter(item)
306              itemgetter(*items)
307
308   Return a callable object that fetches *item* from its operand using the
309   operand's :meth:`__getitem__` method.  If multiple items are specified,
310   returns a tuple of lookup values.  For example:
311
312   * After ``f = itemgetter(2)``, the call ``f(r)`` returns ``r[2]``.
313
314   * After ``g = itemgetter(2, 5, 3)``, the call ``g(r)`` returns
315     ``(r[2], r[5], r[3])``.
316
317   Equivalent to::
318
319      def itemgetter(*items):
320          if len(items) == 1:
321              item = items[0]
322              def g(obj):
323                  return obj[item]
324          else:
325              def g(obj):
326                  return tuple(obj[item] for item in items)
327          return g
328
329   The items can be any type accepted by the operand's :meth:`__getitem__`
330   method.  Dictionaries accept any :term:`hashable` value.  Lists, tuples, and
331   strings accept an index or a slice:
332
333      >>> itemgetter(1)('ABCDEFG')
334      'B'
335      >>> itemgetter(1, 3, 5)('ABCDEFG')
336      ('B', 'D', 'F')
337      >>> itemgetter(slice(2, None))('ABCDEFG')
338      'CDEFG'
339      >>> soldier = dict(rank='captain', name='dotterbart')
340      >>> itemgetter('rank')(soldier)
341      'captain'
342
343   Example of using :func:`itemgetter` to retrieve specific fields from a
344   tuple record:
345
346      >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
347      >>> getcount = itemgetter(1)
348      >>> list(map(getcount, inventory))
349      [3, 2, 5, 1]
350      >>> sorted(inventory, key=getcount)
351      [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
352
353
354.. function:: methodcaller(name, /, *args, **kwargs)
355
356   Return a callable object that calls the method *name* on its operand.  If
357   additional arguments and/or keyword arguments are given, they will be given
358   to the method as well.  For example:
359
360   * After ``f = methodcaller('name')``, the call ``f(b)`` returns ``b.name()``.
361
362   * After ``f = methodcaller('name', 'foo', bar=1)``, the call ``f(b)``
363     returns ``b.name('foo', bar=1)``.
364
365   Equivalent to::
366
367      def methodcaller(name, /, *args, **kwargs):
368          def caller(obj):
369              return getattr(obj, name)(*args, **kwargs)
370          return caller
371
372
373.. _operator-map:
374
375Mapping Operators to Functions
376------------------------------
377
378This table shows how abstract operations correspond to operator symbols in the
379Python syntax and the functions in the :mod:`operator` module.
380
381+-----------------------+-------------------------+---------------------------------------+
382| Operation             | Syntax                  | Function                              |
383+=======================+=========================+=======================================+
384| Addition              | ``a + b``               | ``add(a, b)``                         |
385+-----------------------+-------------------------+---------------------------------------+
386| Concatenation         | ``seq1 + seq2``         | ``concat(seq1, seq2)``                |
387+-----------------------+-------------------------+---------------------------------------+
388| Containment Test      | ``obj in seq``          | ``contains(seq, obj)``                |
389+-----------------------+-------------------------+---------------------------------------+
390| Division              | ``a / b``               | ``truediv(a, b)``                     |
391+-----------------------+-------------------------+---------------------------------------+
392| Division              | ``a // b``              | ``floordiv(a, b)``                    |
393+-----------------------+-------------------------+---------------------------------------+
394| Bitwise And           | ``a & b``               | ``and_(a, b)``                        |
395+-----------------------+-------------------------+---------------------------------------+
396| Bitwise Exclusive Or  | ``a ^ b``               | ``xor(a, b)``                         |
397+-----------------------+-------------------------+---------------------------------------+
398| Bitwise Inversion     | ``~ a``                 | ``invert(a)``                         |
399+-----------------------+-------------------------+---------------------------------------+
400| Bitwise Or            | ``a | b``               | ``or_(a, b)``                         |
401+-----------------------+-------------------------+---------------------------------------+
402| Exponentiation        | ``a ** b``              | ``pow(a, b)``                         |
403+-----------------------+-------------------------+---------------------------------------+
404| Identity              | ``a is b``              | ``is_(a, b)``                         |
405+-----------------------+-------------------------+---------------------------------------+
406| Identity              | ``a is not b``          | ``is_not(a, b)``                      |
407+-----------------------+-------------------------+---------------------------------------+
408| Indexed Assignment    | ``obj[k] = v``          | ``setitem(obj, k, v)``                |
409+-----------------------+-------------------------+---------------------------------------+
410| Indexed Deletion      | ``del obj[k]``          | ``delitem(obj, k)``                   |
411+-----------------------+-------------------------+---------------------------------------+
412| Indexing              | ``obj[k]``              | ``getitem(obj, k)``                   |
413+-----------------------+-------------------------+---------------------------------------+
414| Left Shift            | ``a << b``              | ``lshift(a, b)``                      |
415+-----------------------+-------------------------+---------------------------------------+
416| Modulo                | ``a % b``               | ``mod(a, b)``                         |
417+-----------------------+-------------------------+---------------------------------------+
418| Multiplication        | ``a * b``               | ``mul(a, b)``                         |
419+-----------------------+-------------------------+---------------------------------------+
420| Matrix Multiplication | ``a @ b``               | ``matmul(a, b)``                      |
421+-----------------------+-------------------------+---------------------------------------+
422| Negation (Arithmetic) | ``- a``                 | ``neg(a)``                            |
423+-----------------------+-------------------------+---------------------------------------+
424| Negation (Logical)    | ``not a``               | ``not_(a)``                           |
425+-----------------------+-------------------------+---------------------------------------+
426| Positive              | ``+ a``                 | ``pos(a)``                            |
427+-----------------------+-------------------------+---------------------------------------+
428| Right Shift           | ``a >> b``              | ``rshift(a, b)``                      |
429+-----------------------+-------------------------+---------------------------------------+
430| Slice Assignment      | ``seq[i:j] = values``   | ``setitem(seq, slice(i, j), values)`` |
431+-----------------------+-------------------------+---------------------------------------+
432| Slice Deletion        | ``del seq[i:j]``        | ``delitem(seq, slice(i, j))``         |
433+-----------------------+-------------------------+---------------------------------------+
434| Slicing               | ``seq[i:j]``            | ``getitem(seq, slice(i, j))``         |
435+-----------------------+-------------------------+---------------------------------------+
436| String Formatting     | ``s % obj``             | ``mod(s, obj)``                       |
437+-----------------------+-------------------------+---------------------------------------+
438| Subtraction           | ``a - b``               | ``sub(a, b)``                         |
439+-----------------------+-------------------------+---------------------------------------+
440| Truth Test            | ``obj``                 | ``truth(obj)``                        |
441+-----------------------+-------------------------+---------------------------------------+
442| Ordering              | ``a < b``               | ``lt(a, b)``                          |
443+-----------------------+-------------------------+---------------------------------------+
444| Ordering              | ``a <= b``              | ``le(a, b)``                          |
445+-----------------------+-------------------------+---------------------------------------+
446| Equality              | ``a == b``              | ``eq(a, b)``                          |
447+-----------------------+-------------------------+---------------------------------------+
448| Difference            | ``a != b``              | ``ne(a, b)``                          |
449+-----------------------+-------------------------+---------------------------------------+
450| Ordering              | ``a >= b``              | ``ge(a, b)``                          |
451+-----------------------+-------------------------+---------------------------------------+
452| Ordering              | ``a > b``               | ``gt(a, b)``                          |
453+-----------------------+-------------------------+---------------------------------------+
454
455In-place Operators
456------------------
457
458Many operations have an "in-place" version.  Listed below are functions
459providing a more primitive access to in-place operators than the usual syntax
460does; for example, the :term:`statement` ``x += y`` is equivalent to
461``x = operator.iadd(x, y)``.  Another way to put it is to say that
462``z = operator.iadd(x, y)`` is equivalent to the compound statement
463``z = x; z += y``.
464
465In those examples, note that when an in-place method is called, the computation
466and assignment are performed in two separate steps.  The in-place functions
467listed below only do the first step, calling the in-place method.  The second
468step, assignment, is not handled.
469
470For immutable targets such as strings, numbers, and tuples, the updated
471value is computed, but not assigned back to the input variable:
472
473>>> a = 'hello'
474>>> iadd(a, ' world')
475'hello world'
476>>> a
477'hello'
478
479For mutable targets such as lists and dictionaries, the in-place method
480will perform the update, so no subsequent assignment is necessary:
481
482>>> s = ['h', 'e', 'l', 'l', 'o']
483>>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])
484['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
485>>> s
486['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
487
488.. function:: iadd(a, b)
489              __iadd__(a, b)
490
491   ``a = iadd(a, b)`` is equivalent to ``a += b``.
492
493
494.. function:: iand(a, b)
495              __iand__(a, b)
496
497   ``a = iand(a, b)`` is equivalent to ``a &= b``.
498
499
500.. function:: iconcat(a, b)
501              __iconcat__(a, b)
502
503   ``a = iconcat(a, b)`` is equivalent to ``a += b`` for *a* and *b* sequences.
504
505
506.. function:: ifloordiv(a, b)
507              __ifloordiv__(a, b)
508
509   ``a = ifloordiv(a, b)`` is equivalent to ``a //= b``.
510
511
512.. function:: ilshift(a, b)
513              __ilshift__(a, b)
514
515   ``a = ilshift(a, b)`` is equivalent to ``a <<= b``.
516
517
518.. function:: imod(a, b)
519              __imod__(a, b)
520
521   ``a = imod(a, b)`` is equivalent to ``a %= b``.
522
523
524.. function:: imul(a, b)
525              __imul__(a, b)
526
527   ``a = imul(a, b)`` is equivalent to ``a *= b``.
528
529
530.. function:: imatmul(a, b)
531              __imatmul__(a, b)
532
533   ``a = imatmul(a, b)`` is equivalent to ``a @= b``.
534
535   .. versionadded:: 3.5
536
537
538.. function:: ior(a, b)
539              __ior__(a, b)
540
541   ``a = ior(a, b)`` is equivalent to ``a |= b``.
542
543
544.. function:: ipow(a, b)
545              __ipow__(a, b)
546
547   ``a = ipow(a, b)`` is equivalent to ``a **= b``.
548
549
550.. function:: irshift(a, b)
551              __irshift__(a, b)
552
553   ``a = irshift(a, b)`` is equivalent to ``a >>= b``.
554
555
556.. function:: isub(a, b)
557              __isub__(a, b)
558
559   ``a = isub(a, b)`` is equivalent to ``a -= b``.
560
561
562.. function:: itruediv(a, b)
563              __itruediv__(a, b)
564
565   ``a = itruediv(a, b)`` is equivalent to ``a /= b``.
566
567
568.. function:: ixor(a, b)
569              __ixor__(a, b)
570
571   ``a = ixor(a, b)`` is equivalent to ``a ^= b``.
572