operator — Standard operators as functions¶
Вихідний код: Lib/operator.py
The operator module exports a set of efficient functions corresponding to
the intrinsic operators of Python. For example, operator.add(x, y) is
equivalent to the expression x+y. Many function names are those used for
special methods, without the double underscores. For backward compatibility,
many of these have a variant with the double underscores kept. The variants
without the double underscores are preferred for clarity.
Функції поділяються на категорії, які виконують порівняння об’єктів, логічні операції, математичні операції та операції послідовності.
Функції порівняння об’єктів корисні для всіх об’єктів і названі на честь розширених операторів порівняння, які вони підтримують:
- 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)is equivalent toa <= b,eq(a, b)is equivalent toa == b,ne(a, b)is equivalent toa != b,gt(a, b)is equivalent toa > b, аge(a, b)еквівалентноa >= b. Зауважте, що ці функції можуть повертати будь-яке значення, яке може інтерпретуватися як логічне значення. Перегляньте Порівняння для отримання додаткової інформації про розширені порівняння.
Логічні операції також зазвичай застосовуються до всіх об’єктів і підтримують тести істинності, перевірки ідентичності та логічні операції:
- operator.not_(obj)¶
- operator.__not__(obj)¶
Return the outcome of
notobj. (Note that there is no__not__()method for object instances; only the interpreter core defines this operation. The result is affected by the__bool__()and__len__()methods.)
- operator.truth(obj)¶
Повертає
True, якщо obj має значення true, іFalseв іншому випадку. Це еквівалентно використанню конструктораbool.
- operator.is_(a, b)¶
Повернути
a is b. Перевіряє ідентичність об’єкта.
- operator.is_not(a, b)¶
Повернути
a не є b. Перевіряє ідентичність об’єкта.
- operator.is_none(a)¶
Return
a is None. Tests object identity.Added in version 3.14.
- operator.is_not_none(a)¶
Return
a is not None. Tests object identity.Added in version 3.14.
Найбільш численні математичні та порозрядні операції:
- 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. Це еквівалентно
~obj.
- operator.truediv(a, b)¶
- operator.__truediv__(a, b)¶
Повертає
a / b, де 2/3 дорівнює 0,66, а не 0. Це також відоме як «справжнє» ділення.
Операції, які працюють із послідовностями (деякі з них також із відображеннями), включають:
- operator.contains(a, b)¶
- operator.__contains__(a, b)¶
Повертає результат тесту
b в a. Зверніть увагу на зворотні операнди.
- operator.countOf(a, b)¶
Повертає кількість входжень b у a.
- operator.indexOf(a, b)¶
Повертає індекс першого входження b в a.
- operator.length_hint(obj, default=0)¶
Return an estimated length for the object obj. First try to return its actual length, then an estimate using
object.__length_hint__(), and finally return the default value.Added in version 3.4.
The following operation works with callables:
- operator.call(obj, /, *args, **kwargs)¶
- operator.__call__(obj, /, *args, **kwargs)¶
Return
obj(*args, **kwargs).Added in version 3.11.
The operator module also defines tools for generalized attribute and item
lookups. These are useful for making fast field extractors as arguments for
map(), sorted(), itertools.groupby(), or other functions that
expect a function argument.
- 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)
Return a callable object that fetches item from its operand using the operand’s
__getitem__()method. If multiple items are specified, returns a tuple of lookup values. For example:Після
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
The items can be any type accepted by the operand’s
__getitem__()method. Dictionaries accept any hashable value. Lists, tuples, and strings accept an index or a slice:>>> 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)¶
Повертає викликаний об’єкт, який викликає метод ім’я свого операнда. Якщо надано додаткові аргументи та/або ключові аргументи, вони також будуть надані методу. Наприклад:
Після
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
Відображення операторів у функції¶
This table shows how abstract operations correspond to operator symbols in the
Python syntax and the functions in the operator module.
Операція |
Синтаксис |
функція |
|---|---|---|
Доповнення |
|
|
Конкатенація |
|
|
Тест на утримання |
|
|
Поділ |
|
|
Поділ |
|
|
Порозрядне І |
|
|
Порозрядне виняткове або |
|
|
Побітова інверсія |
|
|
Побітове або |
|
|
Піднесення до степеня |
|
|
Ідентичність |
|
|
Ідентичність |
|
|
Ідентичність |
|
|
Ідентичність |
|
|
Індексоване призначення |
|
|
Індексоване видалення |
|
|
Індексація |
|
|
Ліворуч |
|
|
Модуло |
|
|
Множення |
|
|
Множення матриць |
|
|
Заперечення (арифметика) |
|
|
Заперечення (логічне) |
|
|
Позитивний |
|
|
Правий Shift |
|
|
Призначення фрагмента |
|
|
Видалення фрагмента |
|
|
Нарізка |
|
|
Форматування рядка |
|
|
Віднімання |
|
|
Тест на правду |
|
|
Замовлення |
|
|
Замовлення |
|
|
Рівність |
|
|
Різниця |
|
|
Замовлення |
|
|
Замовлення |
|
|
Оператори на місці¶
Багато операцій мають версію «на місці». Нижче наведено функції, які забезпечують примітивніший доступ до операторів на місці, ніж звичайний синтаксис; наприклад, раз (statement) 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.iconcat(a, b)¶
- operator.__iconcat__(a, b)¶
a = iconcat(a, b)еквівалентноa += bдля послідовностей a і b.