Документация Python неофициальный перевод

operator.md

503 строк · 20.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.15/library/operator.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `operator` – Стандартные операторы как функции89**Исходный код:** [Lib/operator.py](https://python-all.ru/src/3.15/Lib/operator.py)1011---1213Модуль `operator` предоставляет набор эффективных функций, соответствующих встроенным операторам Python. Например, `operator.add(x, y)` эквивалентно выражению `x+y`. Многие названия функций совпадают с названиями специальных методов, но без двойных подчёркиваний. Для обратной совместимости у многих из них есть вариант с сохранением двойных подчёркиваний. Варианты без двойных подчёркиваний предпочтительнее из соображений ясности.1415Функции делятся на категории: сравнение объектов, логические операции, математические операции и операции с последовательностями.1617Функции сравнения объектов полезны для всех объектов и названы по именам поддерживаемых операторов расширенного сравнения:1819#### `operator.lt(a, b)`2021#### `operator.le(a, b)`2223#### `operator.eq(a, b)`2425#### `operator.ne(a, b)`2627#### `operator.ge(a, b)`2829#### `operator.gt(a, b)`3031#### `operator.__lt__(a, b)`3233#### `operator.__le__(a, b)`3435#### `operator.__eq__(a, b)`3637#### `operator.__ne__(a, b)`3839#### `operator.__ge__(a, b)`4041#### `operator.__gt__(a, b)`4243Выполняет «расширенное сравнение» между *a* и *b*. В частности, `lt(a, b)` эквивалентно `a < b`, `le(a, b)` эквивалентно `a <= b`, `eq(a, b)` эквивалентно `a == b`, `ne(a, b)` эквивалентно `a != b`, `gt(a, b)` эквивалентно `a > b`, а `ge(a, b)` эквивалентно `a >= b`. Обратите внимание, что эти функции могут возвращать любое значение, которое может интерпретироваться как булево, а может и нет. См. [Сравнения](https://python-all.ru/3.15/reference/expressions.html#comparisons) для получения дополнительной информации о расширенном сравнении.4445Логические операции также в целом применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:4647#### `operator.not_(obj)`4849#### `operator.__not__(obj)`5051Возвращает результат [`not`](https://python-all.ru/3.15/reference/expressions.html#not) *obj*. (Обратите внимание, что для экземпляров объектов нет метода `__not__()`; только ядро интерпретатора определяет эту операцию. На результат влияют методы [`__bool__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__bool__) и [`__len__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__len__).)5253#### `operator.truth(obj)`5455Возвращает [`True`](https://python-all.ru/3.15/library/constants.html#True), если *obj* истинно, и [`False`](https://python-all.ru/3.15/library/constants.html#False) в противном случае. Это эквивалентно использованию конструктора [`bool`](https://python-all.ru/3.15/library/functions.html#bool).5657#### `operator.is_(a, b)`5859Возвращает `a is b`. Проверяет идентичность объектов.6061#### `operator.is_not(a, b)`6263Возвращает `a is not b`. Проверяет идентичность объектов.6465#### `operator.is_none(a)`6667Возвращает `a is None`. Проверяет идентичность объектов.6869Добавлено в версии 3.14.7071#### `operator.is_not_none(a)`7273Возвращает `a is not None`. Проверяет идентичность объектов.7475Добавлено в версии 3.14.7677Математические и побитовые операции – самые многочисленные:7879#### `operator.abs(obj)`8081#### `operator.__abs__(obj)`8283Возвращает абсолютное значение *obj*.8485#### `operator.add(a, b)`8687#### `operator.__add__(a, b)`8889Возвращает `a + b` для чисел *a* и *b*.9091#### `operator.and_(a, b)`9293#### `operator.__and__(a, b)`9495Вернуть `a & b`.9697#### `operator.floordiv(a, b)`9899#### `operator.__floordiv__(a, b)`100101Вернуть `a // b`.102103#### `operator.index(a)`104105#### `operator.__index__(a)`106107Возвращает *a*, преобразованное в целое число. Эквивалентно `a.__index__()`.108109Изменено в версии 3.10: Результат всегда имеет точный тип [`int`](https://python-all.ru/3.15/library/functions.html#int). Ранее результат мог быть экземпляром подкласса `int`.110111#### `operator.inv(obj)`112113#### `operator.invert(obj)`114115#### `operator.__inv__(obj)`116117#### `operator.__invert__(obj)`118119Вернуть `~obj`.120121#### `operator.lshift(a, b)`122123#### `operator.__lshift__(a, b)`124125Вернуть `a << b`.126127#### `operator.mod(a, b)`128129#### `operator.__mod__(a, b)`130131Вернуть `a % b`.132133#### `operator.mul(a, b)`134135#### `operator.__mul__(a, b)`136137Вернуть `a * b`.138139#### `operator.matmul(a, b)`140141#### `operator.__matmul__(a, b)`142143Вернуть `a @ b`.144145Добавлено в версии 3.5.146147#### `operator.neg(obj)`148149#### `operator.__neg__(obj)`150151Возвращает *obj* с обратным знаком (`-obj`).152153#### `operator.or_(a, b)`154155#### `operator.__or__(a, b)`156157Вернуть `a | b`.158159#### `operator.pos(obj)`160161#### `operator.__pos__(obj)`162163Вернуть `+obj`.164165#### `operator.pow(a, b)`166167#### `operator.__pow__(a, b)`168169Вернуть `a ** b`.170171#### `operator.rshift(a, b)`172173#### `operator.__rshift__(a, b)`174175Вернуть `a >> b`.176177#### `operator.sub(a, b)`178179#### `operator.__sub__(a, b)`180181Вернуть `a - b`.182183#### `operator.truediv(a, b)`184185#### `operator.__truediv__(a, b)`186187Возвращает `a / b`, где 2/3 равно .66, а не 0. Это также известно как «истинное» деление.188189#### `operator.xor(a, b)`190191#### `operator.__xor__(a, b)`192193Вернуть `a ^ b`.194195Операции, которые работают с последовательностями (некоторые также с отображениями), включают:196197#### `operator.concat(a, b)`198199#### `operator.__concat__(a, b)`200201Возвращает `a + b` для последовательностей *a* и *b*.202203#### `operator.contains(a, b)`204205#### `operator.__contains__(a, b)`206207Возвращает результат проверки `b in a`. Операнды переставлены.208209#### `operator.countOf(a, b)`210211Возвращает количество вхождений *b* в *a*.212213#### `operator.delitem(a, b)`214215#### `operator.__delitem__(a, b)`216217Удаляет значение *a* по индексу *b*.218219#### `operator.getitem(a, b)`220221#### `operator.__getitem__(a, b)`222223Возвращает значение *a* по индексу *b*.224225#### `operator.indexOf(a, b)`226227Возвращает индекс первого вхождения *b* в *a*.228229#### `operator.setitem(a, b, c)`230231#### `operator.__setitem__(a, b, c)`232233Устанавливает значение *a* по индексу *b* равным *c*.234235#### `operator.length_hint(obj, default=0)`236237Возвращает приблизительную длину объекта *obj*. Сначала пытается вернуть его фактическую длину, затем оценку с помощью [`object.__length_hint__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__length_hint__), и наконец возвращает значение по умолчанию.238239Добавлено в версии 3.4.240241Следующая операция работает с вызываемыми объектами:242243#### `operator.call(obj, /, *args, **kwargs)`244245#### `operator.__call__(obj, /, *args, **kwargs)`246247Вернуть `obj(*args, **kwargs)`.248249Добавлено в версии 3.12.250251Модуль `operator` также определяет инструменты для обобщённого поиска атрибутов и элементов. Они полезны для создания быстрых извлекателей полей в качестве аргументов для [`map()`](https://python-all.ru/3.15/library/functions.html#map), [`sorted()`](https://python-all.ru/3.15/library/functions.html#sorted), [`itertools.groupby()`](https://python-all.ru/3.15/library/itertools.html#itertools.groupby) или других функций, ожидающих аргумент-функцию.252253#### `operator.attrgetter(attr)`254255#### `operator.attrgetter(*attrs)`256257Возвращает вызываемый объект, который извлекает *attr* из своего операнда. Если запрошено более одного атрибута, возвращает кортеж атрибутов. Имена атрибутов могут также содержать точки. Например:258259- После `f = attrgetter('name')` вызов `f(b)` возвращает `b.name`.260- После `f = attrgetter('name', 'date')` вызов `f(b)` возвращает `(b.name, b.date)`.261- После `f = attrgetter('name.first', 'name.last')` вызов `f(b)` возвращает `(b.name.first, b.name.last)`.262263Эквивалентно следующему:264265```python266def attrgetter(*items):267    if any(not isinstance(item, str) for item in items):268        raise TypeError('attribute name must be a string')269    if len(items) == 1:270        attr = items[0]271        def g(obj):272            return resolve_attr(obj, attr)273    else:274        def g(obj):275            return tuple(resolve_attr(obj, attr) for attr in items)276    return g277278def resolve_attr(obj, attr):279    for name in attr.split("."):280        obj = getattr(obj, name)281    return obj282```283284#### `operator.itemgetter(item)`285286#### `operator.itemgetter(*items)`287288Возвращает вызываемый объект, который извлекает *item* из своего операнда с помощью метода [`__getitem__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__getitem__) операнда. Если указано несколько элементов, возвращает кортеж значений поиска. Например:289290- После `f = itemgetter(2)` вызов `f(r)` возвращает `r[2]`.291- После `g = itemgetter(2, 5, 3)` вызов `g(r)` возвращает `(r[2], r[5], r[3])`.292293Эквивалентно следующему:294295```python296def itemgetter(*items):297    if len(items) == 1:298        item = items[0]299        def g(obj):300            return obj[item]301    else:302        def g(obj):303            return tuple(obj[item] for item in items)304    return g305```306307Элементы могут быть любого типа, принимаемого методом [`__getitem__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__getitem__) операнда. Словари принимают любое [хэшируемое](https://python-all.ru/3.15/glossary.html#term-hashable) значение. Списки, кортежи и строки принимают индекс или срез:308309```python310>>> itemgetter(1)('ABCDEFG')311'B'312>>> itemgetter(1, 3, 5)('ABCDEFG')313('B', 'D', 'F')314>>> itemgetter(slice(2, None))('ABCDEFG')315'CDEFG'316>>> soldier = dict(rank='captain', name='dotterbart')317>>> itemgetter('rank')(soldier)318'captain'319```320321Пример использования `itemgetter()` для извлечения определённых полей из записи-кортежа:322323```python324>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]325>>> getcount = itemgetter(1)326>>> list(map(getcount, inventory))327[3, 2, 5, 1]328>>> sorted(inventory, key=getcount)329[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]330```331332#### `operator.methodcaller(name, /, *args, **kwargs)`333334Возвращает вызываемый объект, который вызывает метод *name* у своего операнда. Если заданы дополнительные аргументы и/или именованные аргументы, они также будут переданы методу. Например:335336- После `f = methodcaller('name')` вызов `f(b)` возвращает `b.name()`.337- После `f = methodcaller('name', 'foo', bar=1)` вызов `f(b)` возвращает `b.name('foo', bar=1)`.338339Эквивалентно следующему:340341```python342def methodcaller(name, /, *args, **kwargs):343    def caller(obj):344        return getattr(obj, name)(*args, **kwargs)345    return caller346```347348## Сопоставление операторов с функциями349350В этой таблице показано, как абстрактные операции соответствуют символам операторов в синтаксисе Python и функциям в модуле `operator`.351352| Операция | Синтаксис | Функция |353| --- | --- | --- |354| Сложение | `a + b` | `add(a, b)` |355| Конкатенация | `seq1 + seq2` | `concat(seq1, seq2)` |356| Проверка вхождения | `obj in seq` | `contains(seq, obj)` |357| Деление | `a / b` | `truediv(a, b)` |358| Деление | `a // b` | `floordiv(a, b)` |359| Побитовое И, или пересечение | `a & b` | `and_(a, b)` |360| Побитовое исключающее ИЛИ, или симметрическая разность | `a ^ b` | `xor(a, b)` |361| Побитовая инверсия, или дополнение | `~ a` | `invert(a)` |362| Побитовое ИЛИ, или объединение | `a \| b` | `or_(a, b)` |363| Возведение в степень | `a ** b` | `pow(a, b)` |364| Тождественность | `a is b` | `is_(a, b)` |365| Тождественность | `a is not b` | `is_not(a, b)` |366| Тождественность | `a is None` | `is_none(a)` |367| Тождественность | `a is not None` | `is_not_none(a)` |368| Присваивание по индексу | `obj[k] = v` | `setitem(obj, k, v)` |369| Удаление по индексу | `del obj[k]` | `delitem(obj, k)` |370| Индексация | `obj[k]` | `getitem(obj, k)` |371| Сдвиг влево | `a << b` | `lshift(a, b)` |372| Остаток от деления | `a % b` | `mod(a, b)` |373| Умножение | `a * b` | `mul(a, b)` |374| Матричное умножение | `a @ b` | `matmul(a, b)` |375| Отрицание (арифметическое) | `- a` | `neg(a)` |376| Отрицание (логическое) | `not a` | `not_(a)` |377| Положительный знак | `+ a` | `pos(a)` |378| Сдвиг вправо | `a >> b` | `rshift(a, b)` |379| Присваивание среза | `seq[i:j] = values` | `setitem(seq, slice(i, j), values)` |380| Удаление среза | `del seq[i:j]` | `delitem(seq, slice(i, j))` |381| Срез | `seq[i:j]` | `getitem(seq, slice(i, j))` |382| Форматирование строк | `s % obj` | `mod(s, obj)` |383| Вычитание | `a - b` | `sub(a, b)` |384| Проверка истинности | `obj` | `truth(obj)` |385| Упорядочение | `a < b` | `lt(a, b)` |386| Упорядочение | `a <= b` | `le(a, b)` |387| Равенство | `a == b` | `eq(a, b)` |388| Различие | `a != b` | `ne(a, b)` |389| Упорядочение | `a >= b` | `ge(a, b)` |390| Упорядочение | `a > b` | `gt(a, b)` |391392## Операторы на месте393394Многие операции имеют версию «на месте». Ниже перечислены функции, которые предоставляют более примитивный доступ к операторам на месте, чем обычный синтаксис; например, [оператор](https://python-all.ru/3.15/glossary.html#term-statement) `x += y` эквивалентен `x = operator.iadd(x, y)`. Другими словами, `z = operator.iadd(x, y)` эквивалентен составному оператору `z = x; z += y`.395396В этих примерах обратите внимание, что при вызове метода на месте вычисление и присваивание выполняются в два отдельных шага. Функции на месте, приведённые ниже, делают только первый шаг – вызов метода на месте. Второй шаг, присваивание, не выполняется.397398Для неизменяемых объектов, таких как строки, числа и кортежи, новое значение вычисляется, но не присваивается обратно входной переменной:399400```python401>>> a = 'hello'402>>> iadd(a, ' world')403'hello world'404>>> a405'hello'406```407408Для изменяемых объектов, таких как списки и словари, метод на месте выполняет обновление, поэтому последующее присваивание не требуется:409410```python411>>> s = ['h', 'e', 'l', 'l', 'o']412>>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])413['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']414>>> s415['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']416```417418#### `operator.iadd(a, b)`419420#### `operator.__iadd__(a, b)`421422`a = iadd(a, b)` эквивалентно `a += b`.423424#### `operator.iand(a, b)`425426#### `operator.__iand__(a, b)`427428`a = iand(a, b)` эквивалентно `a &= b`.429430#### `operator.iconcat(a, b)`431432#### `operator.__iconcat__(a, b)`433434`a = iconcat(a, b)` эквивалентен `a += b` для последовательностей *a* и *b*.435436#### `operator.ifloordiv(a, b)`437438#### `operator.__ifloordiv__(a, b)`439440`a = ifloordiv(a, b)` эквивалентно `a //= b`.441442#### `operator.ilshift(a, b)`443444#### `operator.__ilshift__(a, b)`445446`a = ilshift(a, b)` эквивалентно `a <<= b`.447448#### `operator.imod(a, b)`449450#### `operator.__imod__(a, b)`451452`a = imod(a, b)` эквивалентно `a %= b`.453454#### `operator.imul(a, b)`455456#### `operator.__imul__(a, b)`457458`a = imul(a, b)` эквивалентно `a *= b`.459460#### `operator.imatmul(a, b)`461462#### `operator.__imatmul__(a, b)`463464`a = imatmul(a, b)` эквивалентно `a @= b`.465466Добавлено в версии 3.5.467468#### `operator.ior(a, b)`469470#### `operator.__ior__(a, b)`471472`a = ior(a, b)` эквивалентно `a |= b`.473474#### `operator.ipow(a, b)`475476#### `operator.__ipow__(a, b)`477478`a = ipow(a, b)` эквивалентно `a **= b`.479480#### `operator.irshift(a, b)`481482#### `operator.__irshift__(a, b)`483484`a = irshift(a, b)` эквивалентно `a >>= b`.485486#### `operator.isub(a, b)`487488#### `operator.__isub__(a, b)`489490`a = isub(a, b)` эквивалентно `a -= b`.491492#### `operator.itruediv(a, b)`493494#### `operator.__itruediv__(a, b)`495496`a = itruediv(a, b)` эквивалентно `a /= b`.497498#### `operator.ixor(a, b)`499500#### `operator.__ixor__(a, b)`501502`a = ixor(a, b)` эквивалентно `a ^= b`.503