Содержание страницы
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.inv(obj)¶
- operator.invert(obj)¶
- operator.__inv__(obj)¶
- operator.__invert__(obj)¶
- Возвращает побитовую инверсию числа obj. Эквивалентно ~obj.
- operator.truediv(a, b)¶
- operator.__truediv__(a, b)¶
- Возвращает a / b, где 2/3 равно .66, а не 0. Это также называется «истинным» делением.
- operator.index(a)¶
- operator.__index__(a)¶
- Возвращает a, преобразованный в целое число. Эквивалентно a.__index__().
Операции с последовательностями включают:
- operator.contains(a, b)¶
- operator.__contains__(a, b)¶
- Возвращает результат проверки b in a. Обратите внимание: операнды переставлены.
- operator.countOf(a, b)¶
- Возвращает количество вхождений b в a.
- 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.iconcat(a, b)¶
- operator.__iconcat__(a, b)¶
- a = iconcat(a, b) эквивалентно 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) |