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