operator.md
1> **Источник:** https://python-all.ru/3.1/library/operator.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.9. `operator` – Стандартные операторы в виде функций89Модуль `operator` экспортирует набор функций, реализованных на C, соответствующих встроенным операторам Python. Например, `operator.add(x, y)` эквивалентно выражению `x+y`. Имена функций – это те, что используются для специальных методов классов; для удобства также предоставляются варианты без ведущих и завершающих `__`.1011Функции делятся на категории: сравнение объектов, логические операции, математические операции и операции с последовательностями.1213Функции сравнения объектов полезны для всех объектов и названы по именам поддерживаемых операторов расширенного сравнения:1415#### `operator.lt(a, b)`1617#### `operator.le(a, b)`1819#### `operator.eq(a, b)`2021#### `operator.ne(a, b)`2223#### `operator.ge(a, b)`2425#### `operator.gt(a, b)`2627#### `operator.__lt__(a, b)`2829#### `operator.__le__(a, b)`3031#### `operator.__eq__(a, b)`3233#### `operator.__ne__(a, b)`3435#### `operator.__ge__(a, b)`3637#### `operator.__gt__(a, b)`3839Выполняет «расширенные сравнения» между4041*a*4243и4445*b*4647. В частности,4849`lt(a, b)`5051эквивалентно5253`a < b`5455,5657`le(a, b)`5859эквивалентно6061`a <= b`6263,6465`eq(a, b)`6667эквивалентно6869`a == b`7071,7273`ne(a, b)`7475эквивалентно7677`a != b`7879,8081`gt(a, b)`8283эквивалентно8485`a > b`8687, а8889`ge(a, b)`9091эквивалентно9293`a >= b`9495. Обратите внимание, что эти функции могут возвращать любое значение, которое может трактоваться или не трактоваться как булево. См.9697[*Сравнения*](https://python-all.ru/3.1/reference/expressions.html#comparisons)9899для получения дополнительной информации о расширенных сравнениях.100101Логические операции также в целом применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:102103#### `operator.not_(obj)`104105#### `operator.__not__(obj)`106107Возвращает результат108109[`not`](https://python-all.ru/3.1/reference/expressions.html#not)110111*obj*112113. (Обратите внимание, что для экземпляров объектов не существует метода114115[`__not__()`](https://python-all.ru/3.1/library/operator.html#operator.__not__)116117; только ядро интерпретатора определяет эту операцию. Результат зависит от методов118119[`__bool__()`](https://python-all.ru/3.1/reference/datamodel.html#object.__bool__)120121и122123[`__len__()`](https://python-all.ru/3.1/reference/datamodel.html#object.__len__)124125.)126127#### `operator.truth(obj)`128129Возвращает130131[`True`](https://python-all.ru/3.1/library/constants.html#True)132133, если134135*obj*136137истинно, и138139[`False`](https://python-all.ru/3.1/library/constants.html#False)140141в противном случае. Это эквивалентно вызову конструктора142143[`bool`](https://python-all.ru/3.1/library/functions.html#bool)144145.146147#### `operator.is_(a, b)`148149Возвращает150151`a is b`152153. Проверяет идентичность объектов.154155#### `operator.is_not(a, b)`156157Возвращает158159`a is not b`160161. Проверяет идентичность объектов.162163Математические и побитовые операции – самые многочисленные:164165#### `operator.abs(obj)`166167#### `operator.__abs__(obj)`168169Возвращает абсолютное значение170171*obj*172173.174175#### `operator.add(a, b)`176177#### `operator.__add__(a, b)`178179Возвращает180181`a + b`182183, для чисел184185*a*186187и188189*b*190191.192193#### `operator.and_(a, b)`194195#### `operator.__and__(a, b)`196197Возвращает побитовое И от198199*a*200201и202203*b*204205.206207#### `operator.floordiv(a, b)`208209#### `operator.__floordiv__(a, b)`210211Возвращает212213`a // b`214215.216217#### `operator.index(a)`218219#### `operator.__index__(a)`220221Возвращает222223*a*224225, преобразованный в целое число. Эквивалентно226227`a.__index__()`228229.230231#### `operator.inv(obj)`232233#### `operator.invert(obj)`234235#### `operator.__inv__(obj)`236237#### `operator.__invert__(obj)`238239Возвращает побитовую инверсию числа240241*obj*242243. Эквивалентно244245`~obj`246247.248249#### `operator.lshift(a, b)`250251#### `operator.__lshift__(a, b)`252253Возвращает254255*a*256257, сдвинутое влево на258259*b*260261.262263#### `operator.mod(a, b)`264265#### `operator.__mod__(a, b)`266267Возвращает268269`a % b`270271.272273#### `operator.mul(a, b)`274275#### `operator.__mul__(a, b)`276277Возвращает278279`a * b`280281, для чисел282283*a*284285и286287*b*288289.290291#### `operator.neg(obj)`292293#### `operator.__neg__(obj)`294295Возвращает отрицание296297*obj*298299(300301`-obj`302303).304305#### `operator.or_(a, b)`306307#### `operator.__or__(a, b)`308309Возвращает побитовое ИЛИ310311*a*312313и314315*b*316317.318319#### `operator.pos(obj)`320321#### `operator.__pos__(obj)`322323Возвращает324325*obj*326327с положительным знаком (328329`+obj`330331).332333#### `operator.pow(a, b)`334335#### `operator.__pow__(a, b)`336337Возвращает338339`a ** b`340341, для чисел342343*a*344345и346347*b*348349.350351#### `operator.rshift(a, b)`352353#### `operator.__rshift__(a, b)`354355Возвращает356357*a*358359, сдвинутое вправо на360361*b*362363.364365#### `operator.sub(a, b)`366367#### `operator.__sub__(a, b)`368369Возвращает370371`a - b`372373.374375#### `operator.truediv(a, b)`376377#### `operator.__truediv__(a, b)`378379Возвращает380381`a / b`382383, где 2/3 равно .66, а не 0. Это также называется «истинным» делением.384385#### `operator.xor(a, b)`386387#### `operator.__xor__(a, b)`388389Возвращает побитовое исключающее ИЛИ390391*a*392393и394395*b*396397.398399Операции, которые работают с последовательностями (некоторые также с отображениями), включают:400401#### `operator.concat(a, b)`402403#### `operator.__concat__(a, b)`404405Возвращает406407`a + b`408409для последовательностей410411*a*412413и414415*b*416417.418419#### `operator.contains(a, b)`420421#### `operator.__contains__(a, b)`422423Возвращает результат проверки424425`b in a`426427. Обратите внимание: операнды переставлены.428429#### `operator.countOf(a, b)`430431Возвращает количество вхождений432433*b*434435в436437*a*438439.440441#### `operator.delitem(a, b)`442443#### `operator.__delitem__(a, b)`444445Удаляет значение446447*a*448449по индексу450451*b*452453.454455#### `operator.getitem(a, b)`456457#### `operator.__getitem__(a, b)`458459Возвращает значение460461*a*462463по индексу464465*b*466467.468469#### `operator.indexOf(a, b)`470471Возвращает индекс первого вхождения472473*b*474475в476477*a*478479.480481#### `operator.setitem(a, b, c)`482483#### `operator.__setitem__(a, b, c)`484485Устанавливает значение486487*a*488489по индексу490491*b*492493равным494495*c*496497.498499У многих операций есть версия «на месте». Следующие функции предоставляют более низкоуровневый доступ к операторам «на месте», чем обычный синтаксис; например, [*оператор*](https://python-all.ru/3.1/glossary.html#term-statement) `x += y` эквивалентен `x = operator.iadd(x, y)`. Другими словами, `z = operator.iadd(x, y)` эквивалентно составному оператору `z = x; z += y`.500501#### `operator.iadd(a, b)`502503#### `operator.__iadd__(a, b)`504505`a = iadd(a, b)`506507эквивалентно508509`a += b`510511.512513#### `operator.iand(a, b)`514515#### `operator.__iand__(a, b)`516517`a = iand(a, b)`518519эквивалентно520521`a &= b`522523.524525#### `operator.iconcat(a, b)`526527#### `operator.__iconcat__(a, b)`528529`a = iconcat(a, b)`530531эквивалентно532533`a += b`534535для последовательностей536537*a*538539и540541*b*542543.544545#### `operator.ifloordiv(a, b)`546547#### `operator.__ifloordiv__(a, b)`548549`a = ifloordiv(a, b)`550551эквивалентно552553`a //= b`554555.556557#### `operator.ilshift(a, b)`558559#### `operator.__ilshift__(a, b)`560561`a = ilshift(a, b)`562563эквивалентно564565`a <<= b`566567.568569#### `operator.imod(a, b)`570571#### `operator.__imod__(a, b)`572573`a = imod(a, b)`574575эквивалентно576577`a %= b`578579.580581#### `operator.imul(a, b)`582583#### `operator.__imul__(a, b)`584585`a = imul(a, b)`586587эквивалентно588589`a *= b`590591.592593#### `operator.ior(a, b)`594595#### `operator.__ior__(a, b)`596597`a = ior(a, b)`598599эквивалентно600601`a |= b`602603.604605#### `operator.ipow(a, b)`606607#### `operator.__ipow__(a, b)`608609`a = ipow(a, b)`610611эквивалентно612613`a **= b`614615.616617#### `operator.irshift(a, b)`618619#### `operator.__irshift__(a, b)`620621`a = irshift(a, b)`622623эквивалентно624625`a >>= b`626627.628629#### `operator.isub(a, b)`630631#### `operator.__isub__(a, b)`632633`a = isub(a, b)`634635эквивалентно636637`a -= b`638639.640641#### `operator.itruediv(a, b)`642643#### `operator.__itruediv__(a, b)`644645`a = itruediv(a, b)`646647эквивалентно648649`a /= b`650651.652653#### `operator.ixor(a, b)`654655#### `operator.__ixor__(a, b)`656657`a = ixor(a, b)`658659эквивалентно660661`a ^= b`662663.664665Пример: построить словарь, сопоставляющий порядковые номера от `0` до `255` с соответствующими символами.666667```python668>>> d = {}669>>> keys = range(256)670>>> vals = map(chr, keys)671>>> map(operator.setitem, [d]*len(keys), keys, vals) # doctest: +SKIP672```673674Модуль `operator` также определяет инструменты для обобщённого поиска атрибутов и элементов. Они полезны для создания быстрых извлекателей полей в качестве аргументов для [`map()`](https://python-all.ru/3.1/library/functions.html#map), [`sorted()`](https://python-all.ru/3.1/library/functions.html#sorted), [`itertools.groupby()`](https://python-all.ru/3.1/library/itertools.html#itertools.groupby) или других функций, которые ожидают аргумент-функцию.675676#### `operator.attrgetter(attr[, args...])`677678Возвращает вызываемый объект, который извлекает *attr* из своего операнда. Если запрошено более одного атрибута, возвращает кортеж атрибутов. После, `f = attrgetter('name')` вызов `f(b)` возвращает `b.name`. После, `f = attrgetter('name', 'date')` вызов `f(b)` возвращает `(b.name, b.date)`. Эквивалентно:679680```python681def attrgetter(*items):682 if len(items) == 1:683 attr = items[0]684 def g(obj):685 return resolve_attr(obj, attr)686 else:687 def g(obj):688 return tuple(resolve_att(obj, attr) for attr in items)689 return g690691def resolve_attr(obj, attr):692 for name in attr.split("."):693 obj = getattr(obj, name)694 return obj695```696697Имена атрибутов могут также содержать точки; после `f = attrgetter('date.month')` вызов `f(b)` возвращает `b.date.month`.698699#### `operator.itemgetter(item[, args...])`700701Возвращает вызываемый объект, который извлекает *item* из своего операнда, используя метод [`__getitem__()`](https://python-all.ru/3.1/library/operator.html#operator.__getitem__) операнда. Если указано несколько элементов, возвращает кортеж значений поиска. Эквивалентно:702703```python704def itemgetter(*items):705 if len(items) == 1:706 item = items[0]707 def g(obj):708 return obj[item]709 else:710 def g(obj):711 return tuple(obj[item] for item in items)712 return g713```714715Элементы могут быть любого типа, принимаемого методом [`__getitem__()`](https://python-all.ru/3.1/library/operator.html#operator.__getitem__) операнда. Словари принимают любое хешируемое значение. Списки, кортежи и строки принимают индекс или срез:716717```python718>>> itemgetter(1)('ABCDEFG')719'B'720>>> itemgetter(1,3,5)('ABCDEFG')721('B', 'D', 'F')722>>> itemgetter(slice(2,None))('ABCDEFG')723'CDEFG'724```725726Пример использования [`itemgetter()`](https://python-all.ru/3.1/library/operator.html#operator.itemgetter) для извлечения определённых полей из записи-кортежа:727728```python729>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]730>>> getcount = itemgetter(1)731>>> list(map(getcount, inventory))732[3, 2, 5, 1]733>>> sorted(inventory, key=getcount)734[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]735```736737#### `operator.methodcaller(name[, args...])`738739Возвращает вызываемый объект, который вызывает метод *name* на своем операнде. Если указаны дополнительные аргументы и/или ключевые аргументы, они также будут переданы методу. После `f = methodcaller('name')` вызов `f(b)` возвращает `b.name()`. После `f = methodcaller('name', 'foo', bar=1)` вызов `f(b)` возвращает `b.name('foo', bar=1)`. Эквивалентно:740741```python742def methodcaller(name, *args, **kwargs):743 def caller(obj):744 return getattr(obj, name)(*args, **kwargs)745 return caller746```747748## 9.9.1. Отображение операторов на функции749750В этой таблице показано соответствие абстрактных операций символам операторов в синтаксисе Python и функциям модуля `operator`.751752| Операция | Синтаксис | Функция |753| --- | --- | --- |754| Сложение | `a + b` | `add(a, b)` |755| Конкатенация | `seq1 + seq2` | `concat(seq1, seq2)` |756| Проверка вхождения | `obj in seq` | `contains(seq, obj)` |757| Деление | `a / b` | `div(a, b)` |758| Деление | `a // b` | `floordiv(a, b)` |759| Побитовое И | `a & b` | `and_(a, b)` |760| Побитовое исключающее ИЛИ | `a ^ b` | `xor(a, b)` |761| Побитовая инверсия | `~ a` | `invert(a)` |762| Побитовое ИЛИ | `a \| b` | `or_(a, b)` |763| Возведение в степень | `a ** b` | `pow(a, b)` |764| Тождественность | `a is b` | `is_(a, b)` |765| Тождественность | `a is not b` | `is_not(a, b)` |766| Присваивание по индексу | `obj[k] = v` | `setitem(obj, k, v)` |767| Удаление по индексу | `del obj[k]` | `delitem(obj, k)` |768| Индексация | `obj[k]` | `getitem(obj, k)` |769| Сдвиг влево | `a << b` | `lshift(a, b)` |770| Остаток от деления | `a % b` | `mod(a, b)` |771| Умножение | `a * b` | `mul(a, b)` |772| Отрицание (арифметическое) | `- a` | `neg(a)` |773| Отрицание (логическое) | `not a` | `not_(a)` |774| Положительный знак | `+ a` | `pos(a)` |775| Сдвиг вправо | `a >> b` | `rshift(a, b)` |776| Повторение последовательности | `seq * i` | `repeat(seq, i)` |777| Присваивание среза | `seq[i:j] = values` | `setitem(seq, slice(i, j), values)` |778| Удаление среза | `del seq[i:j]` | `delitem(seq, slice(i, j))` |779| Срез | `seq[i:j]` | `getitem(seq, slice(i, j))` |780| Форматирование строк | `s % obj` | `mod(s, obj)` |781| Вычитание | `a - b` | `sub(a, b)` |782| Проверка истинности | `obj` | `truth(obj)` |783| Упорядочение | `a < b` | `lt(a, b)` |784| Упорядочение | `a <= b` | `le(a, b)` |785| Равенство | `a == b` | `eq(a, b)` |786| Различие | `a != b` | `ne(a, b)` |787| Упорядочение | `a >= b` | `ge(a, b)` |788| Упорядочение | `a > b` | `gt(a, b)` |789