operator — Стандартные операторы как функции
Модуль operator экспортирует набор эффективных функций, соответствующих встроенным операторам 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. Обратите внимание, что в отличие от встроенной функцииcmp(), эти функции могут возвращать любые значения, которые могут или не могут быть интерпретированы как булевы значения. Дополнительную информацию о расширенных сравнениях см. в Сравнения.Новое в версии 2.2.
Логические операции также в основном применимы ко всем объектам и поддерживают проверки истинности, проверки тождественности и булевы операции:
-
operator.not_(obj) -
operator.__not__(obj) -
Возвращает результат применения оператора
notк obj. (Обратите внимание, что нет метода__not__()для экземпляров объектов; эту операцию определяет только ядро интерпретатора. Результат зависит от методов__nonzero__()и__len__()).
-
operator.truth(obj) -
Возвращает
True, если obj истинно, иFalseв противном случае. Это эквивалентно использованию конструктораbool.
-
operator.is_(a, b) -
Возвращает
a is b. Проверяет тождественность объектов.Новое в версии 2.3.
-
operator.is_not(a, b) -
Возвращает
a is not b. Проверяет тождественность объектов.Новое в версии 2.3.
Математические и побитовые операции являются наиболее многочисленными:
-
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.div(a, b) -
operator.__div__(a, b) -
Возвращает
a / bкогда__future__.divisionне включено. Это также известно как «классическое» деление.
-
operator.floordiv(a, b) -
operator.__floordiv__(a, b) -
Возвращает
a // b.Новое в версии 2.2.
-
operator.index(a) -
operator.__index__(a) -
Преобразует a в целое число. Эквивалентно
a.__index__().Новое в версии 2.5.
-
operator.inv(obj) -
operator.invert(obj) -
operator.__inv__(obj) -
operator.__invert__(obj) -
Возвращает побитовое отрицание числа obj. Это эквивалентно
~obj.Новое в версии 2.0: Имена
invert()и__invert__().
-
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 (
-obj).
-
operator.or_(a, b) -
operator.__or__(a, b) -
Возвращает побитовое дизъюнкцию a и b.
-
operator.pos(obj) -
operator.__pos__(obj) -
Возвращает положительное значение obj (
+obj).
-
operator.pow(a, b) -
operator.__pow__(a, b) -
Возвращает
a ** b, для чисел a и b.Новое в версии 2.3.
-
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когда__future__.divisionвключено. Это также известно как «истинное» деление.Новое в версии 2.2.
-
operator.xor(a, b) -
operator.__xor__(a, b) -
Возвращает побитовое исключающее ИЛИ a и b.
Операции, которые работают с последовательностями (некоторые из них также с отображениями), включают:
-
operator.concat(a, b) -
operator.__concat__(a, b) -
Возвращает
a + bдля последовательностей a и b.
-
operator.contains(a, b) -
operator.__contains__(a, b) -
Возвращает результат проверки
b in a. Обратите внимание на обратный порядок операндов.Новое в версии 2.0: Имя
__contains__().
-
operator.countOf(a, b) -
Возвращает количество вхождений b в a.
-
operator.delitem(a, b) -
operator.__delitem__(a, b) -
Удаляет значение a по индексу b.
-
operator.delslice(a, b, c) -
operator.__delslice__(a, b, c) -
Удаляет срез a от индекса b до индекса c-1.
Устаревшая начиная с версии 2.6: Эта функция удалена в Python 3.x. Используйте
delitem()с индексом среза.
-
operator.getitem(a, b) -
operator.__getitem__(a, b) -
Возвращает значение a по индексу b.
-
operator.getslice(a, b, c) -
operator.__getslice__(a, b, c) -
Возвращает срез a с индекса b до индекса c-1.
Устарело начиная с версии 2.6: Эта функция удалена в Python 3.x. Используйте
getitem()со срезным индексом.
-
operator.indexOf(a, b) -
Возвращает индекс первого вхождения b в a.
-
operator.repeat(a, b) -
operator.__repeat__(a, b) -
Устарело начиная с версии 2.7: Используйте
__mul__()вместо этого.Возвращает
a * b, где a — последовательность, а b — целое число.
-
operator.sequenceIncludes(...) -
Устарело начиная с версии 2.0: Используйте
contains()вместо этого.Псевдоним для
contains().
-
operator.setitem(a, b, c) -
operator.__setitem__(a, b, c) -
Устанавливает значение a по индексу b в c.
-
operator.setslice(a, b, c, v) -
operator.__setslice__(a, b, c, v) -
Устанавливает срез a с индекса b до индекса c-1 в последовательность v.
Устарело начиная с версии 2.6: Эта функция удалена в Python 3.x. Используйте
setitem()со срезным индексом.
Пример использования операторных функций:
>>> # Elementwise multiplication >>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40]) [0, 20, 60, 120] >>> # Dot product >>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40])) 200
Многие операции имеют «встроенную» версию. Следующие функции обеспечивают более примитивный доступ к операциям in-place, чем обычный синтаксис; например, оператор 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.Новая функция в версии 2.5.
-
operator.iand(a, b) -
operator.__iand__(a, b) -
a = iand(a, b)эквивалентенa &= b.Новая функция в версии 2.5.
-
operator.iconcat(a, b) -
operator.__iconcat__(a, b) -
a = iconcat(a, b)эквивалентенa += bдля последовательностей a и b.Новая функция в версии 2.5.
-
operator.idiv(a, b) -
operator.__idiv__(a, b) -
a = idiv(a, b)эквивалентенa /= bкогда__future__.divisionне активен.Новая функция в версии 2.5.
-
operator.ifloordiv(a, b) -
operator.__ifloordiv__(a, b) -
a = ifloordiv(a, b)эквивалентенa //= b.Новая функция в версии 2.5.
-
operator.ilshift(a, b) -
operator.__ilshift__(a, b) -
a = ilshift(a, b)эквивалентенa <<= b.Новая функция в версии 2.5.
-
operator.imod(a, b) -
operator.__imod__(a, b) -
a = imod(a, b)эквивалентенa %= b.Новая функция в версии 2.5.
-
operator.imul(a, b) -
operator.__imul__(a, b) -
a = imul(a, b)эквивалентенa *= b.Новая функция в версии 2.5.
-
operator.ior(a, b) -
operator.__ior__(a, b) -
a = ior(a, b)эквивалентенa |= b.Новая функция в версии 2.5.
-
operator.ipow(a, b) -
operator.__ipow__(a, b) -
a = ipow(a, b)эквивалентенa **= b.Новая функция в версии 2.5.
-
operator.irepeat(a, b) -
operator.__irepeat__(a, b) -
Устарело начиная с версии 2.7: Используйте
__imul__()вместо этого.a = irepeat(a, b)эквивалентенa *= b, где a — последовательность, а b — целое число.Новая функция в версии 2.5.
-
operator.irshift(a, b) -
operator.__irshift__(a, b) -
a = irshift(a, b)эквивалентенa >>= b.Новая функция в версии 2.5.
-
operator.isub(a, b) -
operator.__isub__(a, b) -
a = isub(a, b)эквивалентенa -= b.Новая функция в версии 2.5.
-
operator.itruediv(a, b) -
operator.__itruediv__(a, b) -
a = itruediv(a, b)эквивалентенa /= bкогда__future__.divisionактивен.Новая функция в версии 2.5.
-
operator.ixor(a, b) -
operator.__ixor__(a, b) -
a = ixor(a, b)эквивалентенa ^= b.Новая функция в версии 2.5.
Модуль operator также определяет несколько предикатных функций для проверки типа объектов; однако, они не всегда надёжны. Лучше использовать абстрактные базовые классы (см. collections и numbers для получения подробностей).
-
operator.isCallable(obj) -
Устарело начиная с версии 2.0: Используйте
isinstance(x, collections.Callable)вместо этого.Возвращает true, если объект obj может быть вызван как функция, иначе возвращает false. True возвращается для функций, связанных и несвязанных методов, объектов класса и объектов экземпляров, поддерживающих метод
__call__().
-
operator.isMappingType(obj) -
Устарело начиная с версии 2.7: Используйте
isinstance(x, collections.Mapping)вместо этого.Возвращает true, если объект obj поддерживает интерфейс отображения. Это верно для словарей и всех объектах экземпляров, определяющих
__getitem__().
-
operator.isNumberType(obj) -
Устарело начиная с версии 2.7: Используйте
isinstance(x, numbers.Number)вместо этого.Возвращает true, если объект obj представляет число. Это верно для всех числовых типов, реализованных в C.
-
operator.isSequenceType(obj) -
Устарело начиная с версии 2.7: Используйте
isinstance(x, collections.Sequence)вместо этого.Возвращает true, если объект obj поддерживает протокол последовательности. Это возвращает true для всех объектов, которые определяют методы последовательности в C, и для всех объектов экземпляров, определяющих
__getitem__().
Модуль operator также определяет инструменты для обобщенного поиска атрибутов и элементов. Они полезны для создания быстрых экстрактров полей в качестве аргументов для map(), sorted(), itertools.groupby() или других функций, которые ожидают функцию в качестве аргумента.
-
operator.attrgetter(attr) -
operator.attrgetter(*attrs) -
Возвращает вызываемый объект, который извлекает attr из своего операнда. Если запрашивается более одного атрибута, возвращается кортеж атрибутов. Имена атрибутов также могут содержать точки. Например:
- После
f = attrgetter('name'), вызовf(b)возвращаетb.name. - После
f = attrgetter('name', 'date'), вызовf(b)возвращает(b.name, b.date). - После
f = attrgetter('name.first', 'name.last'), вызовf(b)возвращает(b.name.first, b.name.last).
Эквивалентно:
def attrgetter(*items): if len(items) == 1: attr = items[0] def g(obj): return resolve_attr(obj, attr) else: def g(obj): return tuple(resolve_attr(obj, attr) for attr in items) return g def resolve_attr(obj, attr): for name in attr.split("."): obj = getattr(obj, name) return objНовая в версии 2.4.
Изменено в версии 2.5: Добавлена поддержка нескольких атрибутов.
Изменено в версии 2.6: Добавлена поддержка атрибутов с точками.
- После
-
operator.itemgetter(item) -
operator.itemgetter(*items) -
Возвращает вызываемый объект, который извлекает item из своего операнда, используя метод
__getitem__()операнда. Если указано несколько элементов, возвращается кортеж значений поиска. Например:- После
f = itemgetter(2), вызовf(r)возвращаетr[2]. - После
g = itemgetter(2, 5, 3), вызовg(r)возвращает(r[2], r[5], r[3]).
Эквивалентно:
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'Новая в версии 2.4.
Изменено в версии 2.5: Добавлена поддержка извлечения нескольких элементов.
Пример использования
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).
Эквивалентно:
def methodcaller(name, *args, **kwargs): def caller(obj): return getattr(obj, name)(*args, **kwargs) return callerНовая в версии 2.6.
- После
1. Сопоставление операторов функциям
В этой таблице показано, как абстрактные операции соответствуют символам операторов в синтаксисе Python и функциям в модуле operator.
Операция | Синтаксис | Функция |
|---|---|---|
Сложение |
|
|
Конкатенация |
|
|
Тест на принадлежность |
|
|
Деление |
|
|
Деление |
|
|
Деление |
|
|
Побитовое И |
|
|
Побитовое исключающее ИЛИ |
|
|
Побитовое отрицание |
|
|
Побитовое ИЛИ |
|
|
Возведение в степень |
|
|
Тождество |
|
|
Тождество |
|
|
Присваивание по индексу |
|
|
Удаление по индексу |
|
|
Индексирование |
|
|
Левый сдвиг |
|
|
Остаток от деления |
|
|
Умножение |
|
|
Отрицание (арифметическое) |
|
|
Отрицание (логическое) |
|
|
Положительное |
|
|
Правый сдвиг |
|
|
Повторение последовательности |
|
|
Присваивание срезу |
|
|
Удаление срезу |
|
|
Срез |
|
|
Форматирование строк |
|
|
Вычитание |
|
|
Проверка истинности |
|
|
Сортировка |
|
|
Сортировка |
|
|
Равенство |
|
|
Разность |
|
|
Сортировка |
|
|
Сортировка |
|
|
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/operator.html