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

operator.md

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

1> **Источник:** https://python-all.ru/3.0/library/operator.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `operator` – Стандартные операторы в виде функций89Модуль `operator` экспортирует набор функций, реализованных на C, соответствующих встроенным операторам Python. Например, `operator.add(x, y)` эквивалентно выражению `x+y`. Имена функций – это те, что используются для специальных методов классов; для удобства также предоставляются варианты без ведущих и завершающих `__`.1011Функции делятся на категории: сравнение объектов, логические операции, математические операции, операции с последовательностями и проверки абстрактных типов.1213Функции сравнения объектов полезны для всех объектов и названы по именам поддерживаемых операторов расширенного сравнения:1415#### `[operator.lt]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.0/reference/expressions.html#comparisons)9899для получения дополнительной информации о расширенных сравнениях.100101Логические операции также в целом применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:102103#### `[operator.not_]operator.not_(obj)`104105#### `operator.__not__(obj)`106107Возвращает результат108109[`not`](https://python-all.ru/3.0/reference/expressions.html#not)110111*obj*112113. (Обратите внимание, что для экземпляров объектов не существует метода114115[`__not__()`](https://python-all.ru/3.0/library/operator.html#operator.__not__)116117; только ядро интерпретатора определяет эту операцию. Результат зависит от методов118119[`__bool__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__bool__)120121и122123[`__len__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__len__)124125.)126127#### `[operator.truth]operator.truth(obj)`128129Возвращает130131[`True`](https://python-all.ru/3.0/library/constants.html#True)132133, если134135*obj*136137истинно, и138139[`False`](https://python-all.ru/3.0/library/constants.html#False)140141в противном случае. Это эквивалентно вызову конструктора142143[`bool`](https://python-all.ru/3.0/library/functions.html#bool)144145.146147#### `[operator.is_]operator.is_(a, b)`148149Возвращает150151`a is b`152153. Проверяет идентичность объектов.154155#### `[operator.is_not]operator.is_not(a, b)`156157Возвращает158159`a is not b`160161. Проверяет идентичность объектов.162163Математические и побитовые операции – самые многочисленные:164165#### `[operator.abs]operator.abs(obj)`166167#### `operator.__abs__(obj)`168169Возвращает абсолютное значение170171*obj*172173.174175#### `[operator.add]operator.add(a, b)`176177#### `operator.__add__(a, b)`178179Возвращает180181`a + b`182183, для чисел184185*a*186187и188189*b*190191.192193#### `[operator.and_]operator.and_(a, b)`194195#### `operator.__and__(a, b)`196197Возвращает побитовое И от198199*a*200201и202203*b*204205.206207#### `[operator.floordiv]operator.floordiv(a, b)`208209#### `operator.__floordiv__(a, b)`210211Возвращает212213`a // b`214215.216217#### `[operator.inv]operator.inv(obj)`218219#### `operator.invert(obj)`220221#### `operator.__inv__(obj)`222223#### `operator.__invert__(obj)`224225Возвращает побитовую инверсию числа226227*obj*228229. Эквивалентно230231`~obj`232233.234235#### `[operator.lshift]operator.lshift(a, b)`236237#### `operator.__lshift__(a, b)`238239Возвращает240241*a*242243, сдвинутое влево на244245*b*246247.248249#### `[operator.mod]operator.mod(a, b)`250251#### `operator.__mod__(a, b)`252253Возвращает254255`a % b`256257.258259#### `[operator.mul]operator.mul(a, b)`260261#### `operator.__mul__(a, b)`262263Возвращает264265`a * b`266267, для чисел268269*a*270271и272273*b*274275.276277#### `[operator.neg]operator.neg(obj)`278279#### `operator.__neg__(obj)`280281Возвращает282283*obj*284285с обратным знаком.286287#### `[operator.or_]operator.or_(a, b)`288289#### `operator.__or__(a, b)`290291Возвращает побитовое ИЛИ292293*a*294295и296297*b*298299.300301#### `[operator.pos]operator.pos(obj)`302303#### `operator.__pos__(obj)`304305Возвращает306307*obj*308309со знаком плюс.310311#### `[operator.pow]operator.pow(a, b)`312313#### `operator.__pow__(a, b)`314315Возвращает316317`a ** b`318319, для чисел320321*a*322323и324325*b*326327.328329#### `[operator.rshift]operator.rshift(a, b)`330331#### `operator.__rshift__(a, b)`332333Возвращает334335*a*336337, сдвинутое вправо на338339*b*340341.342343#### `[operator.sub]operator.sub(a, b)`344345#### `operator.__sub__(a, b)`346347Возвращает348349`a - b`350351.352353#### `[operator.truediv]operator.truediv(a, b)`354355#### `operator.__truediv__(a, b)`356357Возвращает358359`a / b`360361, где 2/3 равно .66, а не 0. Это также называется «истинным» делением.362363#### `[operator.xor]operator.xor(a, b)`364365#### `operator.__xor__(a, b)`366367Возвращает побитовое исключающее ИЛИ368369*a*370371и372373*b*374375.376377#### `[operator.index]operator.index(a)`378379#### `operator.__index__(a)`380381Возвращает382383*a*384385, преобразованный в целое число. Эквивалентно386387`a.__index__()`388389.390391Операции с последовательностями включают:392393#### `[operator.concat]operator.concat(a, b)`394395#### `operator.__concat__(a, b)`396397Возвращает398399`a + b`400401для последовательностей402403*a*404405и406407*b*408409.410411#### `[operator.contains]operator.contains(a, b)`412413#### `operator.__contains__(a, b)`414415Возвращает результат проверки416417`b in a`418419. Обратите внимание: операнды переставлены.420421#### `[operator.countOf]operator.countOf(a, b)`422423Возвращает количество вхождений424425*b*426427в428429*a*430431.432433#### `[operator.delitem]operator.delitem(a, b)`434435#### `operator.__delitem__(a, b)`436437Удаляет значение438439*a*440441по индексу442443*b*444445.446447#### `[operator.getitem]operator.getitem(a, b)`448449#### `operator.__getitem__(a, b)`450451Возвращает значение452453*a*454455по индексу456457*b*458459.460461#### `[operator.indexOf]operator.indexOf(a, b)`462463Возвращает индекс первого вхождения464465*b*466467в468469*a*470471.472473#### `[operator.setitem]operator.setitem(a, b, c)`474475#### `operator.__setitem__(a, b, c)`476477Устанавливает значение478479*a*480481по индексу482483*b*484485равным486487*c*488489.490491У многих операций есть версия «на месте». Следующие функции предоставляют более низкоуровневый доступ к операторам «на месте», чем обычный синтаксис; например, [*оператор*](https://python-all.ru/3.0/glossary.html#term-statement) `x += y` эквивалентен `x = operator.iadd(x, y)`. Другими словами, `z = operator.iadd(x, y)` эквивалентно составному оператору `z = x; z += y`.492493#### `[operator.iadd]operator.iadd(a, b)`494495#### `operator.__iadd__(a, b)`496497`a = iadd(a, b)`498499эквивалентно500501`a += b`502503.504505#### `[operator.iand]operator.iand(a, b)`506507#### `operator.__iand__(a, b)`508509`a = iand(a, b)`510511эквивалентно512513`a &= b`514515.516517#### `[operator.iconcat]operator.iconcat(a, b)`518519#### `operator.__iconcat__(a, b)`520521`a = iconcat(a, b)`522523эквивалентно524525`a += b`526527для последовательностей528529*a*530531и532533*b*534535.536537#### `[operator.ifloordiv]operator.ifloordiv(a, b)`538539#### `operator.__ifloordiv__(a, b)`540541`a = ifloordiv(a, b)`542543эквивалентно544545`a //= b`546547.548549#### `[operator.ilshift]operator.ilshift(a, b)`550551#### `operator.__ilshift__(a, b)`552553`a = ilshift(a, b)`554555эквивалентно556557`a <<= b`558559.560561#### `[operator.imod]operator.imod(a, b)`562563#### `operator.__imod__(a, b)`564565`a = imod(a, b)`566567эквивалентно568569`a %= b`570571.572573#### `[operator.imul]operator.imul(a, b)`574575#### `operator.__imul__(a, b)`576577`a = imul(a, b)`578579эквивалентно580581`a *= b`582583.584585#### `[operator.ior]operator.ior(a, b)`586587#### `operator.__ior__(a, b)`588589`a = ior(a, b)`590591эквивалентно592593`a |= b`594595.596597#### `[operator.ipow]operator.ipow(a, b)`598599#### `operator.__ipow__(a, b)`600601`a = ipow(a, b)`602603эквивалентно604605`a **= b`606607.608609#### `[operator.irshift]operator.irshift(a, b)`610611#### `operator.__irshift__(a, b)`612613`a = irshift(a, b)`614615эквивалентно616617`a >>= b`618619.620621#### `[operator.isub]operator.isub(a, b)`622623#### `operator.__isub__(a, b)`624625`a = isub(a, b)`626627эквивалентно628629`a -= b`630631.632633#### `[operator.itruediv]operator.itruediv(a, b)`634635#### `operator.__itruediv__(a, b)`636637`a = itruediv(a, b)`638639эквивалентно640641`a /= b`642643.644645#### `[operator.ixor]operator.ixor(a, b)`646647#### `operator.__ixor__(a, b)`648649`a = ixor(a, b)`650651эквивалентно652653`a ^= b`654655.656657Пример: построить словарь, сопоставляющий порядковые номера от `0` до `255` с соответствующими символами.658659```python660>>> d = {}661>>> keys = range(256)662>>> vals = map(chr, keys)663>>> map(operator.setitem, [d]*len(keys), keys, vals)   # doctest: +SKIP664```665666Модуль `operator` также определяет инструменты для обобщённого поиска атрибутов и элементов. Они полезны для создания быстрых извлекателей полей в качестве аргументов для [`map()`](https://python-all.ru/3.0/library/functions.html#map), [`sorted()`](https://python-all.ru/3.0/library/functions.html#sorted), [`itertools.groupby()`](https://python-all.ru/3.0/library/itertools.html#itertools.groupby) или других функций, которые ожидают аргумент-функцию.667668#### `[operator.attrgetter]operator.attrgetter(attr[, args...])`669670Возвращает вызываемый объект, который извлекает *attr* из своего операнда. Если запрошено более одного атрибута, возвращает кортеж атрибутов. После `f = attrgetter('name')` вызов `f(b)` возвращает `b.name`. После `f = attrgetter('name', 'date')` вызов `f(b)` возвращает `(b.name, b.date)`.671672Имена атрибутов могут также содержать точки; после `f = attrgetter('date.month')` вызов `f(b)` возвращает `b.date.month`.673674#### `[operator.itemgetter]operator.itemgetter(item[, args...])`675676Возвращает вызываемый объект, который извлекает *item* из своего операнда, используя метод [`__getitem__()`](https://python-all.ru/3.0/library/operator.html#operator.__getitem__) операнда. Если указано несколько элементов, возвращает кортеж значений поиска. Эквивалентно:677678```python679def itemgetter(*items):680    if len(items) == 1:681        item = items[0]682        def g(obj):683            return obj[item]684    else:685        def g(obj):686            return tuple(obj[item] for item in items)687    return g688```689690Элементы могут быть любого типа, принимаемого методом [`__getitem__()`](https://python-all.ru/3.0/library/operator.html#operator.__getitem__) операнда. Словари принимают любое хешируемое значение. Списки, кортежи и строки принимают индекс или срез:691692```python693>>> itemgetter(1)('ABCDEFG')694'B'695>>> itemgetter(1,3,5)('ABCDEFG')696('B', 'D', 'F')697>>> itemgetter(slice(2,None))('ABCDEFG')698'CDEFG'699```700701Пример использования [`itemgetter()`](https://python-all.ru/3.0/library/operator.html#operator.itemgetter) для извлечения определённых полей из записи-кортежа:702703```python704>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]705>>> getcount = itemgetter(1)706>>> map(getcount, inventory)707[3, 2, 5, 1]708>>> sorted(inventory, key=getcount)709[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]710```711712#### `[operator.methodcaller]operator.methodcaller(name[, args...])`713714Возвращает вызываемый объект, который вызывает метод715716*name*717718на своём операнде. Если указаны дополнительные аргументы или именованные аргументы, они будут переданы методу. После719720`f = methodcaller('name')`721722вызов723724`f(b)`725726возвращает727728`b.name()`729730. После731732`f = methodcaller('name', 'foo', bar=1)`733734вызов735736`f(b)`737738возвращает739740`b.name('foo', bar=1)`741742.743744## Сопоставление операторов с функциями745746В этой таблице показано соответствие абстрактных операций символам операторов в синтаксисе Python и функциям модуля `operator`.747748| Операция | Синтаксис | Функция |749| --- | --- | --- |750| Сложение | `a + b` | `add(a, b)` |751| Конкатенация | `seq1 + seq2` | `concat(seq1, seq2)` |752| Проверка вхождения | `obj in seq` | `contains(seq, obj)` |753| Деление | `a / b` | `truediv(a, b)` |754| Деление | `a // b` | `floordiv(a, b)` |755| Побитовое И | `a & b` | `and_(a, b)` |756| Побитовое исключающее ИЛИ | `a ^ b` | `xor(a, b)` |757| Побитовая инверсия | `~ a` | `invert(a)` |758| Побитовое ИЛИ | `a \| b` | `or_(a, b)` |759| Возведение в степень | `a ** b` | `pow(a, b)` |760| Тождественность | `a is b` | `is_(a, b)` |761| Тождественность | `a is not b` | `is_not(a, b)` |762| Присваивание по индексу | `obj[k] = v` | `setitem(obj, k, v)` |763| Удаление по индексу | `del obj[k]` | `delitem(obj, k)` |764| Индексация | `obj[k]` | `getitem(obj, k)` |765| Сдвиг влево | `a << b` | `lshift(a, b)` |766| Остаток от деления | `a % b` | `mod(a, b)` |767| Умножение | `a * b` | `mul(a, b)` |768| Отрицание (арифметическое) | `- a` | `neg(a)` |769| Отрицание (логическое) | `not a` | `not_(a)` |770| Сдвиг вправо | `a >> b` | `rshift(a, b)` |771| Форматирование строк | `s % obj` | `mod(s, obj)` |772| Вычитание | `a - b` | `sub(a, b)` |773| Проверка истинности | `obj` | `truth(obj)` |774| Упорядочение | `a < b` | `lt(a, b)` |775| Упорядочение | `a <= b` | `le(a, b)` |776| Равенство | `a == b` | `eq(a, b)` |777| Различие | `a != b` | `ne(a, b)` |778| Упорядочение | `a >= b` | `ge(a, b)` |779| Упорядочение | `a > b` | `gt(a, b)` |780