Spec-Zone.ru › Python 2.7

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.

Операция

Синтаксис

Функция

Сложение

a + b

add(a, b)

Конкатенация

seq1 + seq2

concat(seq1, seq2)

Тест на принадлежность

obj in seq

contains(seq, obj)

Деление

a / b

div(a, b) (без __future__.division)

Деление

a / b

truediv(a, b) (с __future__.division)

Деление

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

pos(a)

Правый сдвиг

a >> b

rshift(a, b)

Повторение последовательности

seq * i

repeat(seq, i)

Присваивание срезу

seq[i:j] = values

setitem(seq, slice(i, j), values)

Удаление срезу

del seq[i:j]

delitem(seq, slice(i, j))

Срез

seq[i:j]

getitem(seq, slice(i, j))

Форматирование строк

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)

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/operator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API