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

operator.md

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

1> **Источник:** https://python-all.ru/2.7/library/operator.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.9. [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator) – Стандартные операторы как функции89Модуль [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator) экспортирует набор эффективных функций, соответствующих встроенным операторам 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Выполняет «расширенные сравнения» между *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`. Обратите внимание: в отличие от встроенной [`cmp()`](https://python-all.ru/2.7/library/functions.html#cmp), эти функции могут возвращать любое значение, которое может интерпретироваться как булево, а может и нет. См. [Comparisons](https://python-all.ru/2.7/reference/expressions.html#comparisons) для получения дополнительной информации о расширенных сравнениях.4041Новое в версии 2.2.4243Логические операции также в целом применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:4445#### `operator.not_(obj)`4647#### `operator.__not__(obj)`4849Возвращает результат [`not`](https://python-all.ru/2.7/reference/expressions.html#not) *obj*. (Обратите внимание, что для экземпляров объектов нет метода [`__not__()`](https://python-all.ru/2.7/library/operator.html#operator.__not__); только ядро интерпретатора определяет эту операцию. На результат влияют методы [`__nonzero__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__nonzero__) и [`__len__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__len__).)5051#### `operator.truth(obj)`5253Возвращает [`True`](https://python-all.ru/2.7/library/constants.html#True), если *obj* истинно, и [`False`](https://python-all.ru/2.7/library/constants.html#False) в противном случае. Это эквивалентно использованию конструктора [`bool`](https://python-all.ru/2.7/library/functions.html#bool).5455#### `operator.is_(a, b)`5657Возвращает `a is b`. Проверяет идентичность объектов.5859Новое в версии 2.3.6061#### `operator.is_not(a, b)`6263Возвращает `a is not b`. Проверяет идентичность объектов.6465Новое в версии 2.3.6667Математические и побитовые операции – самые многочисленные:6869#### `operator.abs(obj)`7071#### `operator.__abs__(obj)`7273Возвращает абсолютное значение *obj*.7475#### `operator.add(a, b)`7677#### `operator.__add__(a, b)`7879Возвращает `a + b` для чисел *a* и *b*.8081#### `operator.and_(a, b)`8283#### `operator.__and__(a, b)`8485Возвращает побитовое И от *a* и *b*.8687#### `operator.div(a, b)`8889#### `operator.__div__(a, b)`9091Возвращает `a / b`, когда `__future__.division` не действует. Это также известно как «классическое» деление.9293#### `operator.floordiv(a, b)`9495#### `operator.__floordiv__(a, b)`9697Вернуть `a // b`.9899Новое в версии 2.2.100101#### `operator.index(a)`102103#### `operator.__index__(a)`104105Возвращает *a*, преобразованное в целое число. Эквивалентно `a.__index__()`.106107Новое в версии 2.5.108109#### `operator.inv(obj)`110111#### `operator.invert(obj)`112113#### `operator.__inv__(obj)`114115#### `operator.__invert__(obj)`116117Возвращает побитовое обратное значение числа *obj*. Это эквивалентно `~obj`.118119Новое в версии 2.0: Имена [`invert()`](https://python-all.ru/2.7/library/operator.html#operator.invert) и [`__invert__()`](https://python-all.ru/2.7/library/operator.html#operator.__invert__).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` для чисел *a* и *b*.138139#### `operator.neg(obj)`140141#### `operator.__neg__(obj)`142143Возвращает *obj* с обратным знаком (`-obj`).144145#### `operator.or_(a, b)`146147#### `operator.__or__(a, b)`148149Возвращает побитовое ИЛИ *a* и *b*.150151#### `operator.pos(obj)`152153#### `operator.__pos__(obj)`154155Возвращает положительное значение *obj* (`+obj`).156157#### `operator.pow(a, b)`158159#### `operator.__pow__(a, b)`160161Возвращает `a ** b` для чисел *a* и *b*.162163Новое в версии 2.3.164165#### `operator.rshift(a, b)`166167#### `operator.__rshift__(a, b)`168169Возвращает *a*, сдвинутое вправо на *b*.170171#### `operator.sub(a, b)`172173#### `operator.__sub__(a, b)`174175Вернуть `a - b`.176177#### `operator.truediv(a, b)`178179#### `operator.__truediv__(a, b)`180181Возвращает `a / b`, когда действует `__future__.division`. Этот режим также называется «настоящим» делением.182183Новое в версии 2.2.184185#### `operator.xor(a, b)`186187#### `operator.__xor__(a, b)`188189Возвращает побитовое исключающее ИЛИ *a* и *b*.190191Операции, которые работают с последовательностями (некоторые также с отображениями), включают:192193#### `operator.concat(a, b)`194195#### `operator.__concat__(a, b)`196197Возвращает `a + b` для последовательностей *a* и *b*.198199#### `operator.contains(a, b)`200201#### `operator.__contains__(a, b)`202203Возвращает результат проверки `b in a`. Операнды переставлены.204205Новое в версии 2.0: Название [`__contains__()`](https://python-all.ru/2.7/library/operator.html#operator.__contains__).206207#### `operator.countOf(a, b)`208209Возвращает количество вхождений *b* в *a*.210211#### `operator.delitem(a, b)`212213#### `operator.__delitem__(a, b)`214215Удаляет значение *a* по индексу *b*.216217#### `operator.delslice(a, b, c)`218219#### `operator.__delslice__(a, b, c)`220221Удалить срез *a* от индекса *b* до индекса *c-1*.222223Устарело с версии 2.6: Эта функция удалена в Python 3.x. Используйте [`delitem()`](https://python-all.ru/2.7/library/operator.html#operator.delitem) с индексом среза.224225#### `operator.getitem(a, b)`226227#### `operator.__getitem__(a, b)`228229Возвращает значение *a* по индексу *b*.230231#### `operator.getslice(a, b, c)`232233#### `operator.__getslice__(a, b, c)`234235Возвращает срез *a* от индекса *b* до индекса *c-1*.236237Устарело с версии 2.6: Эта функция удалена в Python 3.x. Используйте [`getitem()`](https://python-all.ru/2.7/library/operator.html#operator.getitem) с индексом среза.238239#### `operator.indexOf(a, b)`240241Возвращает индекс первого вхождения *b* в *a*.242243#### `operator.repeat(a, b)`244245#### `operator.__repeat__(a, b)`246247Устарело с версии 2.7: Используйте вместо этого [`__mul__()`](https://python-all.ru/2.7/library/operator.html#operator.__mul__).248249Возвращает `a * b`, где *a* – последовательность, а *b* – целое число.250251#### `operator.sequenceIncludes(...)`252253Устарело с версии 2.0: Вместо этого используйте [`contains()`](https://python-all.ru/2.7/library/operator.html#operator.contains).254255Псевдоним для [`contains()`](https://python-all.ru/2.7/library/operator.html#operator.contains).256257#### `operator.setitem(a, b, c)`258259#### `operator.__setitem__(a, b, c)`260261Устанавливает значение *a* по индексу *b* равным *c*.262263#### `operator.setslice(a, b, c, v)`264265#### `operator.__setslice__(a, b, c, v)`266267Устанавливает срез *a* от индекса *b* до индекса *c-1* равным последовательности *v*.268269Устарело с версии 2.6: Эта функция удалена в Python 3.x. Используйте [`setitem()`](https://python-all.ru/2.7/library/operator.html#operator.setitem) с индексом среза.270271Пример использования функций операторов:272273```python274>>> # Поэлементное умножение275>>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])276[0, 20, 60, 120]277278>>> # Скалярное произведение279>>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))280200281```282283У многих операций есть версия, изменяющая объект на месте. Следующие функции предоставляют более низкоуровневый доступ к операторам, изменяющим объект на месте, чем обычный синтаксис; например, [оператор](https://python-all.ru/2.7/glossary.html#term-statement) `x += y` эквивалентен `x = operator.iadd(x, y)`. Другими словами `z = operator.iadd(x, y)` эквивалентен составному оператору `z = x; z += y`.284285#### `operator.iadd(a, b)`286287#### `operator.__iadd__(a, b)`288289`a = iadd(a, b)` эквивалентно `a += b`.290291Новое в версии 2.5.292293#### `operator.iand(a, b)`294295#### `operator.__iand__(a, b)`296297`a = iand(a, b)` эквивалентно `a &= b`.298299Новое в версии 2.5.300301#### `operator.iconcat(a, b)`302303#### `operator.__iconcat__(a, b)`304305`a = iconcat(a, b)` эквивалентен `a += b` для последовательностей *a* и *b*.306307Новое в версии 2.5.308309#### `operator.idiv(a, b)`310311#### `operator.__idiv__(a, b)`312313`a = idiv(a, b)` эквивалентен `a /= b`, когда `__future__.division` не действует.314315Новое в версии 2.5.316317#### `operator.ifloordiv(a, b)`318319#### `operator.__ifloordiv__(a, b)`320321`a = ifloordiv(a, b)` эквивалентно `a //= b`.322323Новое в версии 2.5.324325#### `operator.ilshift(a, b)`326327#### `operator.__ilshift__(a, b)`328329`a = ilshift(a, b)` эквивалентно `a <<= b`.330331Новое в версии 2.5.332333#### `operator.imod(a, b)`334335#### `operator.__imod__(a, b)`336337`a = imod(a, b)` эквивалентно `a %= b`.338339Новое в версии 2.5.340341#### `operator.imul(a, b)`342343#### `operator.__imul__(a, b)`344345`a = imul(a, b)` эквивалентно `a *= b`.346347Новое в версии 2.5.348349#### `operator.ior(a, b)`350351#### `operator.__ior__(a, b)`352353`a = ior(a, b)` эквивалентно `a |= b`.354355Новое в версии 2.5.356357#### `operator.ipow(a, b)`358359#### `operator.__ipow__(a, b)`360361`a = ipow(a, b)` эквивалентно `a **= b`.362363Новое в версии 2.5.364365#### `operator.irepeat(a, b)`366367#### `operator.__irepeat__(a, b)`368369Устарело с версии 2.7: Используйте вместо этого [`__imul__()`](https://python-all.ru/2.7/library/operator.html#operator.__imul__).370371`a = irepeat(a, b)` эквивалентно `a *= b`, где *a* – последовательность, а *b* – целое число.372373Новое в версии 2.5.374375#### `operator.irshift(a, b)`376377#### `operator.__irshift__(a, b)`378379`a = irshift(a, b)` эквивалентно `a >>= b`.380381Новое в версии 2.5.382383#### `operator.isub(a, b)`384385#### `operator.__isub__(a, b)`386387`a = isub(a, b)` эквивалентно `a -= b`.388389Новое в версии 2.5.390391#### `operator.itruediv(a, b)`392393#### `operator.__itruediv__(a, b)`394395`a = itruediv(a, b)` эквивалентно `a /= b`, когда действует `__future__.division`.396397Новое в версии 2.5.398399#### `operator.ixor(a, b)`400401#### `operator.__ixor__(a, b)`402403`a = ixor(a, b)` эквивалентно `a ^= b`.404405Новое в версии 2.5.406407Модуль [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator) также определяет несколько предикатов для проверки типа объектов; однако не все они надёжны. Вместо этого предпочтительнее проверять абстрактные базовые классы (подробнее см. [`collections`](https://python-all.ru/2.7/library/collections.html#module-collections) и [`numbers`](https://python-all.ru/2.7/library/numbers.html#module-numbers)).408409#### `operator.isCallable(obj)`410411Устарело с версии 2.0: Вместо этого используйте `isinstance(x, collections.Callable)`.412413Возвращает true, если объект *obj* можно вызывать как функцию, иначе возвращает false. True возвращается для функций, связанных и несвязанных методов, объектов классов и объектов экземпляров, поддерживающих метод [`__call__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__call__).414415#### `operator.isMappingType(obj)`416417Устарело с версии 2.7: Используйте вместо этого `isinstance(x, collections.Mapping)`.418419Возвращает true, если объект *obj* поддерживает интерфейс отображения. Это верно для словарей и всех объектов экземпляров, определяющих [`__getitem__()`](https://python-all.ru/2.7/library/operator.html#operator.__getitem__).420421#### `operator.isNumberType(obj)`422423Устарело с версии 2.7: Используйте вместо этого `isinstance(x, numbers.Number)`.424425Возвращает true, если объект *obj* представляет собой число. Это верно для всех числовых типов, реализованных на C.426427#### `operator.isSequenceType(obj)`428429Устарело с версии 2.7: Используйте вместо этого `isinstance(x, collections.Sequence)`.430431Возвращает true, если объект *obj* поддерживает протокол последовательности. Это возвращает true для всех объектов, определяющих методы последовательности на C, и для всех объектов экземпляров, определяющих [`__getitem__()`](https://python-all.ru/2.7/library/operator.html#operator.__getitem__).432433Модуль [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator) также определяет инструменты для обобщённого поиска атрибутов и элементов. Они полезны для создания быстрых извлекателей полей в качестве аргументов для [`map()`](https://python-all.ru/2.7/library/functions.html#map), [`sorted()`](https://python-all.ru/2.7/library/functions.html#sorted), [`itertools.groupby()`](https://python-all.ru/2.7/library/itertools.html#itertools.groupby) или других функций, ожидающих аргумент-функцию.434435#### `operator.attrgetter(attr)`436437#### `operator.attrgetter(*attrs)`438439Возвращает вызываемый объект, который извлекает *attr* из своего операнда. Если запрошено более одного атрибута, возвращает кортеж атрибутов. Имена атрибутов могут также содержать точки. Например:440441- После `f = attrgetter('name')` вызов `f(b)` возвращает `b.name`.442- После `f = attrgetter('name', 'date')` вызов `f(b)` возвращает `(b.name, b.date)`.443- После `f = attrgetter('name.first', 'name.last')` вызов `f(b)` возвращает `(b.name.first, b.name.last)`.444445Эквивалентно следующему:446447```python448def attrgetter(*items):449    if len(items) == 1:450        attr = items[0]451        def g(obj):452            return resolve_attr(obj, attr)453    else:454        def g(obj):455            return tuple(resolve_attr(obj, attr) for attr in items)456    return g457458def resolve_attr(obj, attr):459    for name in attr.split("."):460        obj = getattr(obj, name)461    return obj462```463464Новое в версии 2.4.465466Изменено в версии 2.5: Добавлена поддержка нескольких атрибутов.467468Изменено в версии 2.6: Добавлена поддержка атрибутов с точкой.469470#### `operator.itemgetter(item)`471472#### `operator.itemgetter(*items)`473474Возвращает вызываемый объект, который извлекает *item* из своего операнда с помощью метода [`__getitem__()`](https://python-all.ru/2.7/library/operator.html#operator.__getitem__) операнда. Если указано несколько элементов, возвращает кортеж значений поиска. Например:475476- После `f = itemgetter(2)` вызов `f(r)` возвращает `r[2]`.477- После `g = itemgetter(2, 5, 3)` вызов `g(r)` возвращает `(r[2], r[5], r[3])`.478479Эквивалентно следующему:480481```python482def itemgetter(*items):483    if len(items) == 1:484        item = items[0]485        def g(obj):486            return obj[item]487    else:488        def g(obj):489            return tuple(obj[item] for item in items)490    return g491```492493Элементы могут быть любого типа, принимаемого операнда [`__getitem__()`](https://python-all.ru/2.7/library/operator.html#operator.__getitem__) методом. Словари принимают любой хэшируемый объект. Списки, кортежи и строки принимают индекс или срез:494495```python496>>> itemgetter(1)('ABCDEFG')497'B'498>>> itemgetter(1,3,5)('ABCDEFG')499('B', 'D', 'F')500>>> itemgetter(slice(2,None))('ABCDEFG')501'CDEFG'502```503504Новое в версии 2.4.505506Изменено в версии 2.5: Добавлена поддержка извлечения нескольких элементов.507508Пример использования [`itemgetter()`](https://python-all.ru/2.7/library/operator.html#operator.itemgetter) для извлечения определённых полей из записи-кортежа:509510```python511>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]512>>> getcount = itemgetter(1)513>>> map(getcount, inventory)514[3, 2, 5, 1]515>>> sorted(inventory, key=getcount)516[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]517```518519#### `operator.methodcaller(name[, args...])`520521Возвращает вызываемый объект, который вызывает метод *name* у своего операнда. Если заданы дополнительные аргументы и/или именованные аргументы, они также будут переданы методу. Например:522523- После `f = methodcaller('name')` вызов `f(b)` возвращает `b.name()`.524- После `f = methodcaller('name', 'foo', bar=1)` вызов `f(b)` возвращает `b.name('foo', bar=1)`.525526Эквивалентно следующему:527528```python529def methodcaller(name, *args, **kwargs):530    def caller(obj):531        return getattr(obj, name)(*args, **kwargs)532    return caller533```534535Новое в версии 2.6.536537## 9.9.1. Сопоставление операторов и функций538539В этой таблице показано, как абстрактные операции соответствуют символам операторов в синтаксисе Python и функциям в модуле [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator).540541| Операция | Синтаксис | Функция |542| --- | --- | --- |543| Сложение | `a + b` | `add(a, b)` |544| Конкатенация | `seq1 + seq2` | `concat(seq1, seq2)` |545| Проверка вхождения | `obj in seq` | `contains(seq, obj)` |546| Деление | `a / b` | `div(a, b)` (без `__future__.division`) |547| Деление | `a / b` | `truediv(a, b)``__future__.division`) |548| Деление | `a // b` | `floordiv(a, b)` |549| Побитовое И | `a & b` | `and_(a, b)` |550| Побитовое исключающее ИЛИ | `a ^ b` | `xor(a, b)` |551| Побитовая инверсия | `~ a` | `invert(a)` |552| Побитовое ИЛИ | `a \| b` | `or_(a, b)` |553| Возведение в степень | `a ** b` | `pow(a, b)` |554| Тождественность | `a is b` | `is_(a, b)` |555| Тождественность | `a is not b` | `is_not(a, b)` |556| Присваивание по индексу | `obj[k] = v` | `setitem(obj, k, v)` |557| Удаление по индексу | `del obj[k]` | `delitem(obj, k)` |558| Индексация | `obj[k]` | `getitem(obj, k)` |559| Сдвиг влево | `a << b` | `lshift(a, b)` |560| Остаток от деления | `a % b` | `mod(a, b)` |561| Умножение | `a * b` | `mul(a, b)` |562| Отрицание (арифметическое) | `- a` | `neg(a)` |563| Отрицание (логическое) | `not a` | `not_(a)` |564| Положительный знак | `+ a` | `pos(a)` |565| Сдвиг вправо | `a >> b` | `rshift(a, b)` |566| Повторение последовательности | `seq * i` | `repeat(seq, i)` |567| Присваивание среза | `seq[i:j] = values` | `setitem(seq, slice(i, j), values)` |568| Удаление среза | `del seq[i:j]` | `delitem(seq, slice(i, j))` |569| Срез | `seq[i:j]` | `getitem(seq, slice(i, j))` |570| Форматирование строк | `s % obj` | `mod(s, obj)` |571| Вычитание | `a - b` | `sub(a, b)` |572| Проверка истинности | `obj` | `truth(obj)` |573| Упорядочение | `a < b` | `lt(a, b)` |574| Упорядочение | `a <= b` | `le(a, b)` |575| Равенство | `a == b` | `eq(a, b)` |576| Различие | `a != b` | `ne(a, b)` |577| Упорядочение | `a >= b` | `ge(a, b)` |578| Упорядочение | `a > b` | `gt(a, b)` |579