operator — Стандартные операторы в виде функций
Исходный код: Lib/operator.py
Модуль 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. Обратите внимание, что эти функции могут возвращать любое значение, которое может интерпретироваться как логическое или не интерпретироваться. Дополнительные сведения о расширенных сравнениях см. в разделе Сравнения.
Логические операции также в целом применимы ко всем объектам и поддерживают проверку истинности, проверку идентичности и логические операции:
-
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.is_none(a) -
Возвращает
a is None. Проверяет идентичность объектов.Добавлено в версии 3.14.
-
operator.is_not_none(a) -
Возвращает
a is not None. Проверяет идентичность объектов.Добавлено в версии 3.14.
Математических операций и операций над битами больше всего:
-
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.index(a) -
operator.__index__(a) -
Возвращает a, преобразованное в целое число. Эквивалентно
a.__index__().Изменено в версии 3.10: Результат всегда имеет точный тип
int. Ранее результат мог быть экземпляром подклассаint.
-
operator.inv(obj) -
operator.invert(obj) -
operator.__inv__(obj) -
operator.__invert__(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.
-
operator.matmul(a, b) -
operator.__matmul__(a, b) -
Возвращает
a @ b.Добавлено в версии 3.5.
-
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.
-
operator.pow(a, b) -
operator.__pow__(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 равно 0,66, а не 0. Эта операция также называется «обычным» делением.
-
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. Обратите внимание на обратный порядок операндов.
-
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.
-
operator.length_hint(obj, default=0) -
Возвращает оценочную длину объекта obj. Сначала пытается вернуть фактическую длину, затем оценку с помощью
object.__length_hint__()и, наконец, возвращает значение по умолчанию.Добавлено в версии 3.4.
Следующая операция работает с вызываемыми объектами:
-
operator.call(obj, /, *args, **kwargs) -
operator.__call__(obj, /, *args, **kwargs) -
Возвращает
obj(*args, **kwargs).Добавлено в версии 3.11.
Модуль 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 any(not isinstance(item, str) for item in items): raise TypeError('attribute name must be a string') 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 - После
-
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' >>> soldier = dict(rank='captain', name='dotterbart') >>> itemgetter('rank')(soldier) 'captain'Пример использования
itemgetter()для извлечения конкретных полей из записи-кортежа:>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)] >>> getcount = itemgetter(1) >>> list(map(getcount, inventory)) [3, 2, 5, 1] >>> sorted(inventory, key=getcount) [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)] - После
-
operator.methodcaller(name, /, *args, **kwargs) -
Возвращает вызываемый объект, который вызывает метод 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 - После
Соответствие операторов и функций
В этой таблице показано, как абстрактные операции соотносятся с символами операторов в синтаксисе Python и функциями модуля operator.
Операция | Синтаксис | Функция |
|---|---|---|
Сложение |
|
|
Конкатенация |
|
|
Проверка вхождения |
|
|
Деление |
|
|
Деление |
|
|
Побитовое И, или пересечение |
|
|
Побитовое исключающее ИЛИ, или симметрическая разность |
|
|
Побитовое отрицание, или дополнение |
|
|
Побитовое ИЛИ, или объединение |
|
|
Возведение в степень |
|
|
Идентичность |
|
|
Идентичность |
|
|
Идентичность |
|
|
Идентичность |
|
|
Присваивание по индексу |
|
|
Удаление по индексу |
|
|
Индексация |
|
|
Сдвиг влево |
|
|
Остаток от деления |
|
|
Умножение |
|
|
Умножение матриц |
|
|
Арифметическое отрицание |
|
|
Логическое отрицание |
|
|
Унарный плюс |
|
|
Сдвиг вправо |
|
|
Присваивание срезу |
|
|
Удаление среза |
|
|
Извлечение среза |
|
|
Форматирование строки |
|
|
Вычитание |
|
|
Проверка истинности |
|
|
Сравнение порядка |
|
|
Сравнение порядка |
|
|
Равенство |
|
|
Неравенство |
|
|
Сравнение порядка |
|
|
Сравнение порядка |
|
|
Операторы с присваиванием
У многих операций есть версия «с присваиванием». Ниже перечислены функции, предоставляющие более низкоуровневый доступ к таким операторам, чем обычный синтаксис; например, инструкция x += y эквивалентна x = operator.iadd(x, y). Иными словами, z = operator.iadd(x, y) эквивалентно составной инструкции z = x; z += y.
В этих примерах обратите внимание: при вызове метода с присваиванием вычисление и присваивание выполняются в два отдельных этапа. Перечисленные ниже функции с присваиванием выполняют только первый этап — вызывают соответствующий метод. Второй этап, присваивание, не выполняется.
Для неизменяемых объектов, таких как строки, числа и кортежи, вычисляется обновлённое значение, но оно не присваивается обратно входной переменной:
>>> a = 'hello' >>> iadd(a, ' world') 'hello world' >>> a 'hello'
Для изменяемых объектов, таких как списки и словари, метод с присваиванием выполняет обновление, поэтому последующее присваивание не требуется:
>>> s = ['h', 'e', 'l', 'l', 'o'] >>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd']) ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] >>> s ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
-
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.imatmul(a, b) -
operator.__imatmul__(a, b) -
a = imatmul(a, b)эквивалентноa @= b.Добавлено в версии 3.5.
-
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.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/operator.html