xref: /third_party/python/Doc/library/operator.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`operator` --- Standard operators as functions
27db96d56Sopenharmony_ci===================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: operator
57db96d56Sopenharmony_ci   :synopsis: Functions corresponding to the standard operators.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. sectionauthor:: Skip Montanaro <skip@automatrix.com>
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci**Source code:** :source:`Lib/operator.py`
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci.. testsetup::
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci   import operator
147db96d56Sopenharmony_ci   from operator import itemgetter, iadd
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci--------------
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciThe :mod:`operator` module exports a set of efficient functions corresponding to
197db96d56Sopenharmony_cithe intrinsic operators of Python.  For example, ``operator.add(x, y)`` is
207db96d56Sopenharmony_ciequivalent to the expression ``x+y``. Many function names are those used for
217db96d56Sopenharmony_cispecial methods, without the double underscores.  For backward compatibility,
227db96d56Sopenharmony_cimany of these have a variant with the double underscores kept. The variants
237db96d56Sopenharmony_ciwithout the double underscores are preferred for clarity.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciThe functions fall into categories that perform object comparisons, logical
267db96d56Sopenharmony_cioperations, mathematical operations and sequence operations.
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciThe object comparison functions are useful for all objects, and are named after
297db96d56Sopenharmony_cithe rich comparison operators they support:
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci.. function:: lt(a, b)
337db96d56Sopenharmony_ci              le(a, b)
347db96d56Sopenharmony_ci              eq(a, b)
357db96d56Sopenharmony_ci              ne(a, b)
367db96d56Sopenharmony_ci              ge(a, b)
377db96d56Sopenharmony_ci              gt(a, b)
387db96d56Sopenharmony_ci              __lt__(a, b)
397db96d56Sopenharmony_ci              __le__(a, b)
407db96d56Sopenharmony_ci              __eq__(a, b)
417db96d56Sopenharmony_ci              __ne__(a, b)
427db96d56Sopenharmony_ci              __ge__(a, b)
437db96d56Sopenharmony_ci              __gt__(a, b)
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   Perform "rich comparisons" between *a* and *b*. Specifically, ``lt(a, b)`` is
467db96d56Sopenharmony_ci   equivalent to ``a < b``, ``le(a, b)`` is equivalent to ``a <= b``, ``eq(a,
477db96d56Sopenharmony_ci   b)`` is equivalent to ``a == b``, ``ne(a, b)`` is equivalent to ``a != b``,
487db96d56Sopenharmony_ci   ``gt(a, b)`` is equivalent to ``a > b`` and ``ge(a, b)`` is equivalent to ``a
497db96d56Sopenharmony_ci   >= b``.  Note that these functions can return any value, which may
507db96d56Sopenharmony_ci   or may not be interpretable as a Boolean value.  See
517db96d56Sopenharmony_ci   :ref:`comparisons` for more information about rich comparisons.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ciThe logical operations are also generally applicable to all objects, and support
557db96d56Sopenharmony_citruth tests, identity tests, and boolean operations:
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci.. function:: not_(obj)
597db96d56Sopenharmony_ci              __not__(obj)
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   Return the outcome of :keyword:`not` *obj*.  (Note that there is no
627db96d56Sopenharmony_ci   :meth:`__not__` method for object instances; only the interpreter core defines
637db96d56Sopenharmony_ci   this operation.  The result is affected by the :meth:`__bool__` and
647db96d56Sopenharmony_ci   :meth:`__len__` methods.)
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci.. function:: truth(obj)
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   Return :const:`True` if *obj* is true, and :const:`False` otherwise.  This is
707db96d56Sopenharmony_ci   equivalent to using the :class:`bool` constructor.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci.. function:: is_(a, b)
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   Return ``a is b``.  Tests object identity.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci.. function:: is_not(a, b)
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   Return ``a is not b``.  Tests object identity.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ciThe mathematical and bitwise operations are the most numerous:
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci.. function:: abs(obj)
877db96d56Sopenharmony_ci              __abs__(obj)
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci   Return the absolute value of *obj*.
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci.. function:: add(a, b)
937db96d56Sopenharmony_ci              __add__(a, b)
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   Return ``a + b``, for *a* and *b* numbers.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci.. function:: and_(a, b)
997db96d56Sopenharmony_ci              __and__(a, b)
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   Return the bitwise and of *a* and *b*.
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci.. function:: floordiv(a, b)
1057db96d56Sopenharmony_ci              __floordiv__(a, b)
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   Return ``a // b``.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci.. function:: index(a)
1117db96d56Sopenharmony_ci              __index__(a)
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci   Return *a* converted to an integer.  Equivalent to ``a.__index__()``.
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1167db96d56Sopenharmony_ci      The result always has exact type :class:`int`.  Previously, the result
1177db96d56Sopenharmony_ci      could have been an instance of a subclass of ``int``.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci.. function:: inv(obj)
1217db96d56Sopenharmony_ci              invert(obj)
1227db96d56Sopenharmony_ci              __inv__(obj)
1237db96d56Sopenharmony_ci              __invert__(obj)
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci   Return the bitwise inverse of the number *obj*.  This is equivalent to ``~obj``.
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci.. function:: lshift(a, b)
1297db96d56Sopenharmony_ci              __lshift__(a, b)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   Return *a* shifted left by *b*.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci.. function:: mod(a, b)
1357db96d56Sopenharmony_ci              __mod__(a, b)
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   Return ``a % b``.
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci.. function:: mul(a, b)
1417db96d56Sopenharmony_ci              __mul__(a, b)
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci   Return ``a * b``, for *a* and *b* numbers.
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci.. function:: matmul(a, b)
1477db96d56Sopenharmony_ci              __matmul__(a, b)
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci   Return ``a @ b``.
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   .. versionadded:: 3.5
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci.. function:: neg(obj)
1557db96d56Sopenharmony_ci              __neg__(obj)
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   Return *obj* negated (``-obj``).
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci.. function:: or_(a, b)
1617db96d56Sopenharmony_ci              __or__(a, b)
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   Return the bitwise or of *a* and *b*.
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci.. function:: pos(obj)
1677db96d56Sopenharmony_ci              __pos__(obj)
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci   Return *obj* positive (``+obj``).
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci.. function:: pow(a, b)
1737db96d56Sopenharmony_ci              __pow__(a, b)
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   Return ``a ** b``, for *a* and *b* numbers.
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci.. function:: rshift(a, b)
1797db96d56Sopenharmony_ci              __rshift__(a, b)
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   Return *a* shifted right by *b*.
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci.. function:: sub(a, b)
1857db96d56Sopenharmony_ci              __sub__(a, b)
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci   Return ``a - b``.
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci.. function:: truediv(a, b)
1917db96d56Sopenharmony_ci              __truediv__(a, b)
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci   Return ``a / b`` where 2/3 is .66 rather than 0.  This is also known as
1947db96d56Sopenharmony_ci   "true" division.
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci.. function:: xor(a, b)
1987db96d56Sopenharmony_ci              __xor__(a, b)
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   Return the bitwise exclusive or of *a* and *b*.
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ciOperations which work with sequences (some of them with mappings too) include:
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci.. function:: concat(a, b)
2067db96d56Sopenharmony_ci              __concat__(a, b)
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   Return ``a + b`` for *a* and *b* sequences.
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci.. function:: contains(a, b)
2127db96d56Sopenharmony_ci              __contains__(a, b)
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci   Return the outcome of the test ``b in a``. Note the reversed operands.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci.. function:: countOf(a, b)
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   Return the number of occurrences of *b* in *a*.
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci.. function:: delitem(a, b)
2237db96d56Sopenharmony_ci              __delitem__(a, b)
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci   Remove the value of *a* at index *b*.
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci.. function:: getitem(a, b)
2297db96d56Sopenharmony_ci              __getitem__(a, b)
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   Return the value of *a* at index *b*.
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci.. function:: indexOf(a, b)
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   Return the index of the first of occurrence of *b* in *a*.
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci.. function:: setitem(a, b, c)
2407db96d56Sopenharmony_ci              __setitem__(a, b, c)
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   Set the value of *a* at index *b* to *c*.
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci.. function:: length_hint(obj, default=0)
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   Return an estimated length for the object *obj*. First try to return its
2487db96d56Sopenharmony_ci   actual length, then an estimate using :meth:`object.__length_hint__`, and
2497db96d56Sopenharmony_ci   finally return the default value.
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci   .. versionadded:: 3.4
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ciThe following operation works with callables:
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. function:: call(obj, /, *args, **kwargs)
2577db96d56Sopenharmony_ci              __call__(obj, /, *args, **kwargs)
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   Return ``obj(*args, **kwargs)``.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci   .. versionadded:: 3.11
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ciThe :mod:`operator` module also defines tools for generalized attribute and item
2657db96d56Sopenharmony_cilookups.  These are useful for making fast field extractors as arguments for
2667db96d56Sopenharmony_ci:func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or other functions that
2677db96d56Sopenharmony_ciexpect a function argument.
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci.. function:: attrgetter(attr)
2717db96d56Sopenharmony_ci              attrgetter(*attrs)
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci   Return a callable object that fetches *attr* from its operand.
2747db96d56Sopenharmony_ci   If more than one attribute is requested, returns a tuple of attributes.
2757db96d56Sopenharmony_ci   The attribute names can also contain dots. For example:
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci   * After ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   * After ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns
2807db96d56Sopenharmony_ci     ``(b.name, b.date)``.
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci   * After ``f = attrgetter('name.first', 'name.last')``, the call ``f(b)``
2837db96d56Sopenharmony_ci     returns ``(b.name.first, b.name.last)``.
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci   Equivalent to::
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci      def attrgetter(*items):
2887db96d56Sopenharmony_ci          if any(not isinstance(item, str) for item in items):
2897db96d56Sopenharmony_ci              raise TypeError('attribute name must be a string')
2907db96d56Sopenharmony_ci          if len(items) == 1:
2917db96d56Sopenharmony_ci              attr = items[0]
2927db96d56Sopenharmony_ci              def g(obj):
2937db96d56Sopenharmony_ci                  return resolve_attr(obj, attr)
2947db96d56Sopenharmony_ci          else:
2957db96d56Sopenharmony_ci              def g(obj):
2967db96d56Sopenharmony_ci                  return tuple(resolve_attr(obj, attr) for attr in items)
2977db96d56Sopenharmony_ci          return g
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci      def resolve_attr(obj, attr):
3007db96d56Sopenharmony_ci          for name in attr.split("."):
3017db96d56Sopenharmony_ci              obj = getattr(obj, name)
3027db96d56Sopenharmony_ci          return obj
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci.. function:: itemgetter(item)
3067db96d56Sopenharmony_ci              itemgetter(*items)
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci   Return a callable object that fetches *item* from its operand using the
3097db96d56Sopenharmony_ci   operand's :meth:`__getitem__` method.  If multiple items are specified,
3107db96d56Sopenharmony_ci   returns a tuple of lookup values.  For example:
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci   * After ``f = itemgetter(2)``, the call ``f(r)`` returns ``r[2]``.
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci   * After ``g = itemgetter(2, 5, 3)``, the call ``g(r)`` returns
3157db96d56Sopenharmony_ci     ``(r[2], r[5], r[3])``.
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci   Equivalent to::
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci      def itemgetter(*items):
3207db96d56Sopenharmony_ci          if len(items) == 1:
3217db96d56Sopenharmony_ci              item = items[0]
3227db96d56Sopenharmony_ci              def g(obj):
3237db96d56Sopenharmony_ci                  return obj[item]
3247db96d56Sopenharmony_ci          else:
3257db96d56Sopenharmony_ci              def g(obj):
3267db96d56Sopenharmony_ci                  return tuple(obj[item] for item in items)
3277db96d56Sopenharmony_ci          return g
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci   The items can be any type accepted by the operand's :meth:`__getitem__`
3307db96d56Sopenharmony_ci   method.  Dictionaries accept any :term:`hashable` value.  Lists, tuples, and
3317db96d56Sopenharmony_ci   strings accept an index or a slice:
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci      >>> itemgetter(1)('ABCDEFG')
3347db96d56Sopenharmony_ci      'B'
3357db96d56Sopenharmony_ci      >>> itemgetter(1, 3, 5)('ABCDEFG')
3367db96d56Sopenharmony_ci      ('B', 'D', 'F')
3377db96d56Sopenharmony_ci      >>> itemgetter(slice(2, None))('ABCDEFG')
3387db96d56Sopenharmony_ci      'CDEFG'
3397db96d56Sopenharmony_ci      >>> soldier = dict(rank='captain', name='dotterbart')
3407db96d56Sopenharmony_ci      >>> itemgetter('rank')(soldier)
3417db96d56Sopenharmony_ci      'captain'
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   Example of using :func:`itemgetter` to retrieve specific fields from a
3447db96d56Sopenharmony_ci   tuple record:
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci      >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
3477db96d56Sopenharmony_ci      >>> getcount = itemgetter(1)
3487db96d56Sopenharmony_ci      >>> list(map(getcount, inventory))
3497db96d56Sopenharmony_ci      [3, 2, 5, 1]
3507db96d56Sopenharmony_ci      >>> sorted(inventory, key=getcount)
3517db96d56Sopenharmony_ci      [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci.. function:: methodcaller(name, /, *args, **kwargs)
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   Return a callable object that calls the method *name* on its operand.  If
3577db96d56Sopenharmony_ci   additional arguments and/or keyword arguments are given, they will be given
3587db96d56Sopenharmony_ci   to the method as well.  For example:
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci   * After ``f = methodcaller('name')``, the call ``f(b)`` returns ``b.name()``.
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci   * After ``f = methodcaller('name', 'foo', bar=1)``, the call ``f(b)``
3637db96d56Sopenharmony_ci     returns ``b.name('foo', bar=1)``.
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   Equivalent to::
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci      def methodcaller(name, /, *args, **kwargs):
3687db96d56Sopenharmony_ci          def caller(obj):
3697db96d56Sopenharmony_ci              return getattr(obj, name)(*args, **kwargs)
3707db96d56Sopenharmony_ci          return caller
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci.. _operator-map:
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ciMapping Operators to Functions
3767db96d56Sopenharmony_ci------------------------------
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ciThis table shows how abstract operations correspond to operator symbols in the
3797db96d56Sopenharmony_ciPython syntax and the functions in the :mod:`operator` module.
3807db96d56Sopenharmony_ci
3817db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3827db96d56Sopenharmony_ci| Operation             | Syntax                  | Function                              |
3837db96d56Sopenharmony_ci+=======================+=========================+=======================================+
3847db96d56Sopenharmony_ci| Addition              | ``a + b``               | ``add(a, b)``                         |
3857db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3867db96d56Sopenharmony_ci| Concatenation         | ``seq1 + seq2``         | ``concat(seq1, seq2)``                |
3877db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3887db96d56Sopenharmony_ci| Containment Test      | ``obj in seq``          | ``contains(seq, obj)``                |
3897db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3907db96d56Sopenharmony_ci| Division              | ``a / b``               | ``truediv(a, b)``                     |
3917db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3927db96d56Sopenharmony_ci| Division              | ``a // b``              | ``floordiv(a, b)``                    |
3937db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3947db96d56Sopenharmony_ci| Bitwise And           | ``a & b``               | ``and_(a, b)``                        |
3957db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3967db96d56Sopenharmony_ci| Bitwise Exclusive Or  | ``a ^ b``               | ``xor(a, b)``                         |
3977db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
3987db96d56Sopenharmony_ci| Bitwise Inversion     | ``~ a``                 | ``invert(a)``                         |
3997db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4007db96d56Sopenharmony_ci| Bitwise Or            | ``a | b``               | ``or_(a, b)``                         |
4017db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4027db96d56Sopenharmony_ci| Exponentiation        | ``a ** b``              | ``pow(a, b)``                         |
4037db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4047db96d56Sopenharmony_ci| Identity              | ``a is b``              | ``is_(a, b)``                         |
4057db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4067db96d56Sopenharmony_ci| Identity              | ``a is not b``          | ``is_not(a, b)``                      |
4077db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4087db96d56Sopenharmony_ci| Indexed Assignment    | ``obj[k] = v``          | ``setitem(obj, k, v)``                |
4097db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4107db96d56Sopenharmony_ci| Indexed Deletion      | ``del obj[k]``          | ``delitem(obj, k)``                   |
4117db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4127db96d56Sopenharmony_ci| Indexing              | ``obj[k]``              | ``getitem(obj, k)``                   |
4137db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4147db96d56Sopenharmony_ci| Left Shift            | ``a << b``              | ``lshift(a, b)``                      |
4157db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4167db96d56Sopenharmony_ci| Modulo                | ``a % b``               | ``mod(a, b)``                         |
4177db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4187db96d56Sopenharmony_ci| Multiplication        | ``a * b``               | ``mul(a, b)``                         |
4197db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4207db96d56Sopenharmony_ci| Matrix Multiplication | ``a @ b``               | ``matmul(a, b)``                      |
4217db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4227db96d56Sopenharmony_ci| Negation (Arithmetic) | ``- a``                 | ``neg(a)``                            |
4237db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4247db96d56Sopenharmony_ci| Negation (Logical)    | ``not a``               | ``not_(a)``                           |
4257db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4267db96d56Sopenharmony_ci| Positive              | ``+ a``                 | ``pos(a)``                            |
4277db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4287db96d56Sopenharmony_ci| Right Shift           | ``a >> b``              | ``rshift(a, b)``                      |
4297db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4307db96d56Sopenharmony_ci| Slice Assignment      | ``seq[i:j] = values``   | ``setitem(seq, slice(i, j), values)`` |
4317db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4327db96d56Sopenharmony_ci| Slice Deletion        | ``del seq[i:j]``        | ``delitem(seq, slice(i, j))``         |
4337db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4347db96d56Sopenharmony_ci| Slicing               | ``seq[i:j]``            | ``getitem(seq, slice(i, j))``         |
4357db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4367db96d56Sopenharmony_ci| String Formatting     | ``s % obj``             | ``mod(s, obj)``                       |
4377db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4387db96d56Sopenharmony_ci| Subtraction           | ``a - b``               | ``sub(a, b)``                         |
4397db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4407db96d56Sopenharmony_ci| Truth Test            | ``obj``                 | ``truth(obj)``                        |
4417db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4427db96d56Sopenharmony_ci| Ordering              | ``a < b``               | ``lt(a, b)``                          |
4437db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4447db96d56Sopenharmony_ci| Ordering              | ``a <= b``              | ``le(a, b)``                          |
4457db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4467db96d56Sopenharmony_ci| Equality              | ``a == b``              | ``eq(a, b)``                          |
4477db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4487db96d56Sopenharmony_ci| Difference            | ``a != b``              | ``ne(a, b)``                          |
4497db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4507db96d56Sopenharmony_ci| Ordering              | ``a >= b``              | ``ge(a, b)``                          |
4517db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4527db96d56Sopenharmony_ci| Ordering              | ``a > b``               | ``gt(a, b)``                          |
4537db96d56Sopenharmony_ci+-----------------------+-------------------------+---------------------------------------+
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ciIn-place Operators
4567db96d56Sopenharmony_ci------------------
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ciMany operations have an "in-place" version.  Listed below are functions
4597db96d56Sopenharmony_ciproviding a more primitive access to in-place operators than the usual syntax
4607db96d56Sopenharmony_cidoes; for example, the :term:`statement` ``x += y`` is equivalent to
4617db96d56Sopenharmony_ci``x = operator.iadd(x, y)``.  Another way to put it is to say that
4627db96d56Sopenharmony_ci``z = operator.iadd(x, y)`` is equivalent to the compound statement
4637db96d56Sopenharmony_ci``z = x; z += y``.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ciIn those examples, note that when an in-place method is called, the computation
4667db96d56Sopenharmony_ciand assignment are performed in two separate steps.  The in-place functions
4677db96d56Sopenharmony_cilisted below only do the first step, calling the in-place method.  The second
4687db96d56Sopenharmony_cistep, assignment, is not handled.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ciFor immutable targets such as strings, numbers, and tuples, the updated
4717db96d56Sopenharmony_civalue is computed, but not assigned back to the input variable:
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci>>> a = 'hello'
4747db96d56Sopenharmony_ci>>> iadd(a, ' world')
4757db96d56Sopenharmony_ci'hello world'
4767db96d56Sopenharmony_ci>>> a
4777db96d56Sopenharmony_ci'hello'
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ciFor mutable targets such as lists and dictionaries, the in-place method
4807db96d56Sopenharmony_ciwill perform the update, so no subsequent assignment is necessary:
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci>>> s = ['h', 'e', 'l', 'l', 'o']
4837db96d56Sopenharmony_ci>>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])
4847db96d56Sopenharmony_ci['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
4857db96d56Sopenharmony_ci>>> s
4867db96d56Sopenharmony_ci['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci.. function:: iadd(a, b)
4897db96d56Sopenharmony_ci              __iadd__(a, b)
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ci   ``a = iadd(a, b)`` is equivalent to ``a += b``.
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci.. function:: iand(a, b)
4957db96d56Sopenharmony_ci              __iand__(a, b)
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   ``a = iand(a, b)`` is equivalent to ``a &= b``.
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci.. function:: iconcat(a, b)
5017db96d56Sopenharmony_ci              __iconcat__(a, b)
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   ``a = iconcat(a, b)`` is equivalent to ``a += b`` for *a* and *b* sequences.
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci.. function:: ifloordiv(a, b)
5077db96d56Sopenharmony_ci              __ifloordiv__(a, b)
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci   ``a = ifloordiv(a, b)`` is equivalent to ``a //= b``.
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci
5127db96d56Sopenharmony_ci.. function:: ilshift(a, b)
5137db96d56Sopenharmony_ci              __ilshift__(a, b)
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci   ``a = ilshift(a, b)`` is equivalent to ``a <<= b``.
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci.. function:: imod(a, b)
5197db96d56Sopenharmony_ci              __imod__(a, b)
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci   ``a = imod(a, b)`` is equivalent to ``a %= b``.
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci.. function:: imul(a, b)
5257db96d56Sopenharmony_ci              __imul__(a, b)
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci   ``a = imul(a, b)`` is equivalent to ``a *= b``.
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci.. function:: imatmul(a, b)
5317db96d56Sopenharmony_ci              __imatmul__(a, b)
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci   ``a = imatmul(a, b)`` is equivalent to ``a @= b``.
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci   .. versionadded:: 3.5
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci.. function:: ior(a, b)
5397db96d56Sopenharmony_ci              __ior__(a, b)
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci   ``a = ior(a, b)`` is equivalent to ``a |= b``.
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci.. function:: ipow(a, b)
5457db96d56Sopenharmony_ci              __ipow__(a, b)
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci   ``a = ipow(a, b)`` is equivalent to ``a **= b``.
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci.. function:: irshift(a, b)
5517db96d56Sopenharmony_ci              __irshift__(a, b)
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci   ``a = irshift(a, b)`` is equivalent to ``a >>= b``.
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci.. function:: isub(a, b)
5577db96d56Sopenharmony_ci              __isub__(a, b)
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci   ``a = isub(a, b)`` is equivalent to ``a -= b``.
5607db96d56Sopenharmony_ci
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci.. function:: itruediv(a, b)
5637db96d56Sopenharmony_ci              __itruediv__(a, b)
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ci   ``a = itruediv(a, b)`` is equivalent to ``a /= b``.
5667db96d56Sopenharmony_ci
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci.. function:: ixor(a, b)
5697db96d56Sopenharmony_ci              __ixor__(a, b)
5707db96d56Sopenharmony_ci
5717db96d56Sopenharmony_ci   ``a = ixor(a, b)`` is equivalent to ``a ^= b``.
572