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

operator – Стандартные операторы в виде функцийoperator – Standard operators as functions

Модуль operator экспортирует набор функций, реализованных на C, соответствующих встроенным операторам Python. Например, operator.add(x, y) эквивалентно выражению x+y. Имена функций – это те, что используются для специальных методов классов; для удобства также предоставляются варианты без ведущих и завершающих __.

Функции делятся на категории: сравнение объектов, логические операции, математические операции, операции с последовательностями и проверки абстрактных типов.

Функции сравнения объектов полезны для всех объектов и названы по именам поддерживаемых операторов расширенного сравнения:

operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(a, b)
operator.__lt__(a, b)
operator.__le__(a, b)
operator.__eq__(a, b)
operator.__ne__(a, b)
operator.__ge__(a, b)
operator.__gt__(a, b)
Выполняет «расширенные сравнения» между 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. Обратите внимание, что эти функции могут возвращать любое значение, которое может трактоваться или не трактоваться как булево. См. Сравнения для получения дополнительной информации о расширенных сравнениях.

Логические операции также в целом применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:

operator.not_(obj)
operator.__not__(obj)
Возвращает результат not obj. (Обратите внимание, что для экземпляров объектов не существует метода __not__(); только ядро интерпретатора определяет эту операцию. Результат зависит от методов __bool__() и __len__().)
operator.truth(obj)
Возвращает True, если obj истинно, и False в противном случае. Это эквивалентно вызову конструктора bool.
operator.is_(a, b)
Возвращает a is b. Проверяет идентичность объектов.
operator.is_not(a, b)
Возвращает a is not b. Проверяет идентичность объектов.

Математические и побитовые операции – самые многочисленные:

operator.abs(obj)
operator.__abs__(obj)
Возвращает абсолютное значение obj.
operator.add(a, b)
operator.__add__(a, b)
Возвращает a + b, для чисел a и b.
operator.and_(a, b)
operator.__and__(a, b)
Возвращает побитовое И от a и b.
operator.floordiv(a, b)
operator.__floordiv__(a, b)
Возвращает a // b.
operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)
Возвращает побитовую инверсию числа obj. Эквивалентно ~obj.
operator.lshift(a, b)
operator.__lshift__(a, b)
Возвращает a, сдвинутое влево на b.
operator.mod(a, b)
operator.__mod__(a, b)
Возвращает a % b.
operator.mul(a, b)
operator.__mul__(a, b)
Возвращает a * b, для чисел a и b.
operator.neg(obj)
operator.__neg__(obj)
Возвращает obj с обратным знаком.
operator.or_(a, b)
operator.__or__(a, b)
Возвращает побитовое ИЛИ a и b.
operator.pos(obj)
operator.__pos__(obj)
Возвращает obj со знаком плюс.
operator.pow(a, b)
operator.__pow__(a, b)
Возвращает a ** b, для чисел a и b.
operator.rshift(a, b)
operator.__rshift__(a, b)
Возвращает a, сдвинутое вправо на b.
operator.sub(a, b)
operator.__sub__(a, b)
Возвращает a - b.
operator.truediv(a, b)
operator.__truediv__(a, b)
Возвращает a / b, где 2/3 равно .66, а не 0. Это также называется «истинным» делением.
operator.xor(a, b)
operator.__xor__(a, b)
Возвращает побитовое исключающее ИЛИ a и b.
operator.index(a)
operator.__index__(a)
Возвращает a, преобразованный в целое число. Эквивалентно a.__index__().

Операции с последовательностями включают:

operator.concat(a, b)
operator.__concat__(a, b)
Возвращает a + b для последовательностей a и b.
operator.contains(a, b)
operator.__contains__(a, b)
Возвращает результат проверки b in a. Обратите внимание: операнды переставлены.
operator.countOf(a, b)
Возвращает количество вхождений b в a.
operator.delitem(a, b)
operator.__delitem__(a, b)
Удаляет значение a по индексу b.
operator.getitem(a, b)
operator.__getitem__(a, b)
Возвращает значение a по индексу b.
operator.indexOf(a, b)
Возвращает индекс первого вхождения b в a.
operator.setitem(a, b, c)
operator.__setitem__(a, b, c)
Устанавливает значение a по индексу b равным c.

У многих операций есть версия «на месте». Следующие функции предоставляют более низкоуровневый доступ к операторам «на месте», чем обычный синтаксис; например, оператор x += y эквивалентен x = operator.iadd(x, y). Другими словами, z = operator.iadd(x, y) эквивалентно составному оператору z = x; z += y.

operator.iadd(a, b)
operator.__iadd__(a, b)
a = iadd(a, b) эквивалентно a += b.
operator.iand(a, b)
operator.__iand__(a, b)
a = iand(a, b) эквивалентно a &= b.
operator.iconcat(a, b)
operator.__iconcat__(a, b)
a = iconcat(a, b) эквивалентно a += b для последовательностей a и b.
operator.ifloordiv(a, b)
operator.__ifloordiv__(a, b)
a = ifloordiv(a, b) эквивалентно a //= b.
operator.ilshift(a, b)
operator.__ilshift__(a, b)
a = ilshift(a, b) эквивалентно a <<= b.
operator.imod(a, b)
operator.__imod__(a, b)
a = imod(a, b) эквивалентно a %= b.
operator.imul(a, b)
operator.__imul__(a, b)
a = imul(a, b) эквивалентно a *= b.
operator.ior(a, b)
operator.__ior__(a, b)
a = ior(a, b) эквивалентно a |= b.
operator.ipow(a, b)
operator.__ipow__(a, b)
a = ipow(a, b) эквивалентно a **= b.
operator.irshift(a, b)
operator.__irshift__(a, b)
a = irshift(a, b) эквивалентно a >>= b.
operator.isub(a, b)
operator.__isub__(a, b)
a = isub(a, b) эквивалентно a -= b.
operator.itruediv(a, b)
operator.__itruediv__(a, b)
a = itruediv(a, b) эквивалентно a /= b.
operator.ixor(a, b)
operator.__ixor__(a, b)
a = ixor(a, b) эквивалентно a ^= b.

Пример: построить словарь, сопоставляющий порядковые номера от 0 до 255 с соответствующими символами.

>>> d = {}
>>> keys = range(256)
>>> vals = map(chr, keys)
>>> map(operator.setitem, [d]*len(keys), keys, vals)   # doctest: +SKIP

Модуль operator также определяет инструменты для обобщённого поиска атрибутов и элементов. Они полезны для создания быстрых извлекателей полей в качестве аргументов для map(), sorted(), itertools.groupby() или других функций, которые ожидают аргумент-функцию.

operator.attrgetter(attr[, args...])

Возвращает вызываемый объект, который извлекает attr из своего операнда. Если запрошено более одного атрибута, возвращает кортеж атрибутов. После f = attrgetter('name') вызов f(b) возвращает b.name. После f = attrgetter('name', 'date') вызов f(b) возвращает (b.name, b.date).

Имена атрибутов могут также содержать точки; после f = attrgetter('date.month') вызов f(b) возвращает b.date.month.

operator.itemgetter(item[, args...])

Возвращает вызываемый объект, который извлекает item из своего операнда, используя метод __getitem__() операнда. Если указано несколько элементов, возвращает кортеж значений поиска. Эквивалентно:

def itemgetter(*items):
    if len(items) == 1:
        item = items[0]
        def g(obj):
            return obj[item]
    else:
        def g(obj):
            return tuple(obj[item] for item in items)
    return g

Элементы могут быть любого типа, принимаемого методом __getitem__() операнда. Словари принимают любое хешируемое значение. Списки, кортежи и строки принимают индекс или срез:

>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B', 'D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG'

Пример использования itemgetter() для извлечения определённых полей из записи-кортежа:

>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
>>> getcount = itemgetter(1)
>>> map(getcount, inventory)
[3, 2, 5, 1]
>>> sorted(inventory, key=getcount)
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.methodcaller(name[, args...])
Возвращает вызываемый объект, который вызывает метод name на своём операнде. Если указаны дополнительные аргументы или именованные аргументы, они будут переданы методу. После f = methodcaller('name') вызов f(b) возвращает b.name(). После f = methodcaller('name', 'foo', bar=1) вызов f(b) возвращает b.name('foo', bar=1).

Сопоставление операторов с функциямиMapping Operators to Functions

В этой таблице показано соответствие абстрактных операций символам операторов в синтаксисе Python и функциям модуля operator.

Операция Синтаксис Функция
Сложение a + b add(a, b)
Конкатенация seq1 + seq2 concat(seq1, seq2)
Проверка вхождения obj in seq contains(seq, obj)
Деление a / b truediv(a, b)
Деление a // b floordiv(a, b)
Побитовое И a & b and_(a, b)
Побитовое исключающее ИЛИ a ^ b xor(a, b)
Побитовая инверсия ~ a invert(a)
Побитовое ИЛИ a | b or_(a, b)
Возведение в степень a ** b pow(a, b)
Тождественность a is b is_(a, b)
Тождественность a is not b is_not(a, b)
Присваивание по индексу obj[k] = v setitem(obj, k, v)
Удаление по индексу del obj[k] delitem(obj, k)
Индексация obj[k] getitem(obj, k)
Сдвиг влево a << b lshift(a, b)
Остаток от деления a % b mod(a, b)
Умножение a * b mul(a, b)
Отрицание (арифметическое) - a neg(a)
Отрицание (логическое) not a not_(a)
Сдвиг вправо a >> b rshift(a, b)
Форматирование строк s % obj mod(s, obj)
Вычитание a - b sub(a, b)
Проверка истинности obj truth(obj)
Упорядочение a < b lt(a, b)
Упорядочение a <= b le(a, b)
Равенство a == b eq(a, b)
Различие a != b ne(a, b)
Упорядочение a >= b ge(a, b)
Упорядочение a > b gt(a, b)