Операторы Python помогают вам работать со значениями (операндами), изменять их или комбинировать. Например, операторы могут быть логическими или арифметическими.
- Что такое операторы Python и как они работают?
- Какие типы операторов Python существуют?
- Обратите внимание на присутствие оператора
- Перегруженные операторы, методы Dunder и операторные функции Python
- Краткий обзор операторов Python
- Арифметические операторы
- Операторы сравнения Python
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Тождественные операторы
- Условный оператор
- Операторы множества Python
- Операторы членства Python
- Оператор конкатенации
- Операторы индекса и среза
Что такое операторы Python и как они работают?
Оператор является знаком операции. Обычно используются операторы, объединяющие несколько операндов. В процессе обычно формируется новое значение. Применение оператора к одному операнду изменяет его.
Вероятно, самым простым примером операторов Python является комбинация двух чисел с помощью оператора сложения, т.е. ЧАС. плюсик между цифрами. Python оценивает выражение и возвращает соответствующее значение:
1 + 1
Что особенного в Python, так это то, что короткие слова, такие как «и», «или», «есть», «не» или «в», используются в качестве операторов в дополнение к символам. Комбинация операторов и операндов дает выражение:
1 + 1 == 2
Какие типы операторов Python существуют?
Python знает разные классы операторов. Они работают с разными типами операндов и возвращают результаты определенного типа. Краткий обзор различных типов операторов Python:
| Классы операторов Python | Объяснение | операнды | результат | Операторы с первого взгляда |
| Арифметические операторы | Объедините два номера, чтобы сформировать новый номер | подсчет | Число | +, -, *, /, //, %, **, @ |
| операторы сравнения | Сравните два выражения друг с другом | выражения | логический | <, >, ==, !=, <=, >= |
| Логические операторы | Объединение выражений в логическом контексте | выражения | последнее оцененное выражение / Bool | и, или, не |
| Побитовые операторы | Манипулировать целыми числами как двоичными последовательностями | подсчет | Число | <<, >>, &, |, ^, ~ |
| операторы присваивания | Присвоить значение имени | Lзначение, Rзначение | – / оцененное выражение | =, :=, +=, -=, *= и т. д. |
| тождественные операторы | Определите, относятся ли два имени к одному и тому же объекту | объекты | логический | это не |
| условный оператор | Возвращает одно из двух значений в зависимости от условия | выражение, условие, альтернатива | выражение / альтернатива | … если еще… |
| установить операторы | Связать два набора/сравнить наборы | суммы | сумма / логическое значение | &, |, ^, -, <, >, <=, >= |
| Операторы членства | Проверка, содержит ли итерируемый объект определенный объект | объект, повторяемый | логический | в, не в |
| оператор конкатенации | Объединяет последовательности | Строки/списки/кортежи | Строка/список/кортеж | + |
| Операторы индекса и среза | Возвращает один или несколько элементов итерируемого | Итерируемый, индекс/срез | Строка/список/кортеж | [], [::] |
Помимо типа операндов и возвращаемого значения, операторы классифицируются по их «арности». Арность оператора не имеет ничего общего с «арийцем». Скорее, термин выражает, сколько операндов связывает оператор. В большинстве случаев используются «бинарные» операторы с двумя операндами. Есть также некоторые «унарные» операторы только с одним операндом и «тернарный» оператор, который объединяет три операнда:
| Operator-Arität | Anzahl an Operanden | Beispiel |
|---|---|---|
| Unär | Ein Operand | not single_value |
| Binär | Zwei Operanden | left_operand + right_operand |
| Ternär | Drei Operanden | some_value if condition else other_value |
Обратите внимание на присутствие оператора
Понимание приоритета оператора также имеет основополагающее значение для использования операторов Python. Эта концепция известна как » вычисление точки перед линией » из арифметики. Напомним, что выражение 3 * 8 + 2 интерпретируется как (3 * 8) + 2, а не как 3 * (8 + 2). Как и в случае со знаком «плюс» и знаком «mal», для всех операторов Python существуют правила приоритета. Вот пример выражения с логическими операторами «и», «или» и «не»:
if is_user and is_user_logged_in or is_admin and not login_blocked: ...
Не зная правил приоритета для задействованных операторов Python, невозможно решить, как отдельные термины связаны друг с другом. Когда в выражении используется несколько операторов, все быстро усложняется. В общем, лучше не полагаться на идеальное понимание имплицитных правил. Вместо этого используются явные круглые скобки, чтобы показать, как члены выражения связаны друг с другом:
if (is_user and is_user_logged_in) or (is_admin and not login_blocked): ...
Для сравнения, одни и те же термины сгруппированы по-разному — значение двух выражений разное:
if (is_user and is_user_logged_in or is_admin) and not login_blocked: ...
Перегруженные операторы, методы Dunder и операторные функции Python
Некоторые операторы Python используются для более чем одной операции. Ярким примером является знак плюс; он действует как оператор сложения для чисел и в то же время как оператор конкатенации для конкатенации последовательностей, таких как строки и списки. Складываем два числа с помощью оператора сложения:
8 + 3 == 11
Используя тот же оператор, мы объединяем две строки :
«Walter» + «White» == «WalterWhite»
Мы также объединяем списки с помощью оператора плюс:
['Jack', 'Jim'] + ['John'] == ['Jack', 'Jim', 'John']
Множественное назначение знака плюс в качестве оператора отражает широко распространенную концепцию в информатике. О » перегруженных операторах » говорят, когда один и тот же оператор выполняет разные операции в зависимости от типа данных операндов.
Как перегруженные операторы работают в Python? Под капотом оператор и его операнды интерпретируются как вызов соответствующей функции. В частности, вызывается так называемый метод Дандера первого операнда, который получает дополнительные операнды в качестве аргументов. «Дандер» означает «двойное подчеркивание». Вот как оператор плюс соответствует методу Дандера __add__(). Объекты, реализующие метод __add__(), могут быть объединены с помощью оператора плюс. Что именно представляет собой ссылку, зависит от самого объекта.
Помимо методов Дандера, модуль оператора содержит функции, инкапсулирующие функциональность операторов Python. Таким образом, operator.add(a, b) вызывает метод Dunder a.__add__(b), что эквивалентно выражению a + b. Мы перечислим функции оператора для каждого оператора позже в статье, если они доступны. Имя операторной функции соответствует имени соответствующего метода Дандера. Используйте это как ссылку для реализации собственных функций оператора:
| Python-Operator | Operator-Funktion | Dunder-Methode |
|---|---|---|
| a + b | operator.add(a, b) | a.__add__(b) |
Операторы используют так называемую инфиксную нотацию, которая вставляет оператор между операндами. Напротив, префиксная нотация используется в функциональном стиле. Оба варианта написания эквивалентны:
| Notation | Verwendung | Beispiel |
|---|---|---|
| Infix | Operatoren | a + b |
| Prefix | Funktionen | + a b / add(a, b) |
Рассмотрим пример. Мы определяем два числа и складываем их вместе с помощью оператора, операторной функции и соответствующего метода Дандера:
import operator a = 42 b = 69 assert a + b == operator.add(a, b) == a.__add__(b)
Более сложные выражения также могут быть записаны с операторными функциями. Вот комбинация операторов сложения и равенства Python в префиксной записи:
import operator assert 'Py' + 'thon' == 'Python' assert operator.eq(operator.add('Py', 'thon'), 'Python')
Краткий обзор операторов Python
Теперь мы рассмотрим одиннадцать различных классов операторов Python.
Арифметические операторы
Арифметические операторы Python работают с числами, создавая новое число. За исключением унарного плюса и минуса, все они являются бинарными операторами. Здесь показано в виде обзора:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| + | Addition / unäres Plus | add(a, b) / pos(a) | 5 + 3 == 8 / +8 == 4 + 4 |
| — | Subtraktion / unäres Minus | sub(a, b) / neg(a) | 7 — 2 == 5 / -4 == 2 — 6 |
| * | Multiplikation | mul(a, b) | 2 * 3 == 6 |
| / | „Echte“ Division | truediv(a, b) | 8 / 2 == 4.0, 7 / 2 == 3.5 |
| // | Integer-Division zur nächstkleineren Ganzzahl | floordiv(a, b) | 8 // 2 == 4, 7 // 2 == 3 |
| % | Modulus: Restbetrag der Integer-Division | mod(a, b) | 8 % 2 == 0, 7 % 2 == 1 |
| ** | Exponentation | pow(a, b) | 2 ** 3 == 8, 10 ** -1 == 0.1 |
| @ | Matrix-Multiplikation | matmul(a, b) | – |
Операция модуля используется по умолчанию, чтобы определить, является ли число четным. Четное число, деленное на два, дает в остатке ноль. Мы определяем соответствующую функцию Python, используя оператор модуля:
def is_even(number): return number % 2 == 0 # test assert is_even(8) and not is_even(7)
Умножение матриц требует использования такого пакета, как NumPy.
Операторы сравнения Python
Операторы сравнения Python говорят о том, как два элемента могут быть упорядочены между собой. Они возвращают логический результат и используются, в частности, для алгоритмов сортировки:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| < | Kleiner als | lt(a, b) | 3 < 1, ‘a’ < ‘z’ |
| > | Größer als | gt(a, b) | 4 > 2, ‘z’ > ‘a’ |
| == | Gleich | eq(a, b) | ‘a’ == ‘a’ |
| != | Ungleich | ne(a, b) | 1 != 2, ‘Jim’ != ‘Jack’ |
| <= | Kleiner gleich | le(a, b) | 9 <= 10, 10 <= 10 |
| >= | Größer gleich | ge(a, b) | 11 >= 10, 10 >= 10 |
Логические операторы
Логические операторы и и или объединяют несколько операндов в соответствии с булевой логикой. В результате оба оператора возвращают последний оцененный объект. Логический оператор not Python интерпретирует объект в логическом контексте и отрицает его истинное значение:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| and | Logisches UND | keine direkte Entsprechung | True and False == False, ‘name’ and … == … |
| or | Logisches ODER | keine direkte Entsprechung | False or True == True, a = » or ‘Default’; assert a == ‘Default’ |
| not | Verneinung | not_(a) | not True == False |
Операнды логических операторов Python никоим образом не ограничиваются булевыми переменными. Скорее, любой объект Python можно интерпретировать в логическом контексте. Следующие объекты оцениваются как False в логическом контексте и поэтому называются «ложными»:
| and | True | False |
| True | True | False |
| False | False | False |
| or | True | False |
| True | True | True |
| False | True | False |
| Objekt | Erläuterung |
|---|---|
| False, None | Konstanten, die der Definition nach False sind |
| 0, 0.0, Decimal(0), Fraction(0, 1), etc. | Zahl, die null repräsentiert |
| », (), [], {}, set(), range(0), etc. | Leere Sequenz oder Kollektion |
Побитовые операторы
Побитовые операторы Python работают с целыми числами, интерпретируемыми как строки битов. За исключением побитового оператора НЕ, все они являются бинарными операторами:
Python-OperatorBedeutungOperator-FunktionBeispiel <<Bitfolge nach links schiebenlshift(a, b)5 << 3 == 5 * 2 ** 3 >>Bitfolge nach rechts schiebenrshift(a, b)1 >> 1 == 0, 8 >> 1 == 4 &Zwei Bitfolgen per AND verknüpfenand_(a, b)« Zwei Bitfolgen per OR verknüpfenor_(a, b)«^Zwei Bitfolgen per XOR verknüpfenxor(a, b)« ~Bitfolge mit NOT invertiereninvert(a)«
Побитовые операторы позволяют упростить математические операции. Таким образом, сдвиг влево соответствует умножению на степень двойки:
| Ausdruck | 23 = 8 | 22 = 4 | 21 = 2 | 20 = 1 | Dezimal |
| b = 6 | 0 | 1 | 1 | 0 | 6 |
| b << 1 | 1 | 1 | 0 | 0 | 12 |
| b >> 1 | 0 | 0 | 1 | 1 | 3 |
Чтобы проиллюстрировать побитовые операции И, ИЛИ и НЕ, мы создадим таблицу отдельных битов. Операции применяются к числу в двоичном представлении с использованием битовой маски:
| Ausdruck | 23 = 8 | 22 = 4 | 21 = 2 | 20 = 1 | Dezimal |
| bits = 6 | 0 | 1 | 1 | 0 | 6 |
| mask = 5 | 0 | 1 | 0 | 1 | 5 |
| bits & mask | 0 | 1 | 0 | 0 | 4 |
| bits | mask | 0 | 1 | 1 | 1 | 7 |
| bits ^ mask | 0 | 0 | 1 | 1 | 3 |
Побитовый оператор NOT в Python инвертирует строку битов. Каждая 1 становится 0 и наоборот. Кроме того, знак числа меняется на противоположный:
| Ausdruck | 23 = 8 | 22 = 4 | 21 = 2 | 20 = 1 | Dezimal |
| b = 6 | 0 | 1 | 1 | 0 | 6 |
| ~ b | 1 | 0 | 0 | 1 | -7 |
Операторы присваивания
Присваивания являются одними из основных операторов большинства языков программирования. Операторы присваивания Python связывают значение с именем переменной. В дополнение к оператору присваивания есть более новый оператор «морж», который позволяет присваивать в выражении. Существует также ряд расширенных операторов присваивания, которые объединяют присваивание с другой операцией:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| = | Zuweisungs-Anweisung | keine direkte Entsprechung | name = ‘Walther’ |
| := | Zuweisungs-Ausdruck („Walross“-Operator) | keine direkte Entsprechung | [ half for x in range(10) if (half := x / 2) < 5 ] |
| += | Erweiterte Additions-Zuweisung | iadd(a, b) | x = 1; x += 4; assert x == 5 |
Python имеет расширенные операторы присваивания для арифметических и побитовых операций. Мы не перечисляем их здесь по отдельности, мы просто показываем общую закономерность на примере присваивания расширенной конкатенации. Сначала показан код, который добавляет еще одну часть к существующей строке:
name = 'Walther' name = name + 'White' assert name == 'WaltherWhite'
Эквивалентный пример с использованием расширенного оператора конкатенации Python «+=» дает тот же результат, но код более лаконичен и нагляден:
name = 'Walther' name += 'White' assert name == 'WaltherWhite'
Тождественные операторы
Оператор Python is проверяет, ссылаются ли две переменные на один и тот же объект в памяти. Идентификация объекта отличается от равенства объектов, которое проверяется оператором сравнения Python «==». «Есть» в Python примерно эквивалентно оператору строгого равенства JavaScript «===». Python также знает отрицательный тест идентификации с оператором «не»:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| is | Identitäts-Test | is_(a, b) | a = 42; b = a; assert a is b |
| is not | Negierter Identitäts-Test | is_not(a, b) | assert [42] is not [42] |
Давайте рассмотрим несколько примеров. Мы создаем ссылку на объект в памяти. Позже мы создадим еще одну ссылку в качестве псевдонима. Обе переменные указывают на один и тот же объект в памяти, оператор is возвращает «True»:
# assign value to name a = [42] # reference existing object b = a # if this holds assert a is b # so will this assert a == b
Здесь мы создаем две ссылки на независимые объекты в памяти. Хотя объекты одинаковы, они различны. Соответственно, оператор is возвращает «False»:
# assign the same value to different names a = [42] b = [42] # `a`, `b` are two different objects assert a is not b # that contain the same value assert a == b
Условный оператор
Условный оператор Python — это еще одно использование ключевых слов if-else. Условный оператор часто используется для различения двух возможных значений в присваиваниях. Поскольку условный оператор объединяет условие и два выражения, он также известен как тернарный оператор.
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| … if … else … | Konditionaler Ausdruck | keine direkte Entsprechung | name = ‘Jim’ if age == 42 else ‘Jack’ |
Во-первых, давайте рассмотрим пример использования оператора if-else в Python. Следующий код определяет градусы Цельсия или Фаренгейта в качестве единицы измерения температуры, в зависимости от выбранной системы измерения:
if system == 'metric': unit = 'C' else: unit = 'F'
Используя условный оператор, код можно упростить до одного присваивания:
Операторы множества Python
Помимо строк, кортежей, списков и словарей, Python по умолчанию поддерживает наборы как составной тип данных. Перегруженные операторы определены для обычных операций над множествами:
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel | ||
|---|---|---|---|---|---|
| & | Vereinigung von zwei Mengen bilden | and_(a, b) | {‘a’, ‘b’} & {‘a’, ‘c’} == {‘a’} | ||
| Schnittmenge von zwei Mengen bilden | or_(a, b) | {‘a’, ‘b’} | {‘a’, ‘c’} == {‘a’, ‘c’, ‘b’} | ||
| ^ | Symmetrische Differenz von zwei Mengen bilden | xor(a, b) | {‘a’, ‘b’} ^ {‘a’, ‘c’} == {‘c’, ‘b’} | ||
| — | Differenz von zwei Mengen bilden | sub(a, b) | {‘a’, ‘b’} — {‘a’} == {‘b’} | ||
| > | Testen, ob Menge eine echte Übermenge ist | gt(a, b) | assert {‘a’, ‘b’} > {‘a’} | ||
| >= | Testen, ob Menge eine Übermenge ist | ge(a, b) | assert {‘a’} >= {‘a’} | ||
| < | Testen, ob Menge eine echte Untermenge ist | lt(a, b) | assert {‘a’} < {‘a’, ‘b’} | ||
| <= | Testen, ob Menge eine Untermenge ist | le(a, b) | assert {‘a’} <= {‘a’} |
Операторы членства Python
Операторы членства Python «in» и «not in» предоставляют информацию о том, находится ли объект в коллекции.
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| in | Testet, ob ein Objekt in einem Iterable enthalten ist | contains(a, b) | ‘y’ in ‘Python’ |
| not in | Negierung des in-Operators | not contains(a, b) | ‘x’ not in ‘Python’ |
Операторы принадлежности работают с итерируемыми объектами и используют проверку на равенство, чтобы определить, находится ли целевой объект в коллекции:
'Py' in 'Python' 'Px' not in 'Python' 'Jack' in ['Jim', 'Jack']
Использование оператора in экономит написание кода следующего вида:
def my_in(target, collection): for element in collection: if element == target: return True return False # test word = 'Python' letter = 'y' assert (my_in(letter, word)) == (letter in word)
Оператор конкатенации
В Python оператор конкатенации используется для конкатенации последовательностей одного типа. В качестве символа оператора используется знак плюс.
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| + | Verkettet zwei Sequenzen | add(a, b) | [‘Jim’] + [‘Jack’, ‘John’] |
Давайте рассмотрим несколько примеров. Мы объединяем две строки, два списка и два кортежа :
assert "Walter" + "White" == 'WalterWhite' assert ['a', 'b'] + ['c'] == ['a', 'b', 'c'] assert ('q', 'r') + ('s', 't') == ('q', 'r', 's', 't')
Python находит применение в качестве языка программирования для Интернета. В этом контексте оператор конкатенации используется для составления тегов HTML :
site_title = 'Welcome' print('<h1>' + site_title + '</h1>')
При сравнении Python и PHP операторы конкатенации двух языков различаются. Потому что PHP использует точку «.» в качестве символа. Тот же пример, показанный в PHP :
$siteTitle = 'Welcome'; echo '<h1>' . $siteTitle . '</h1>';
Операторы индекса и среза
Оператор индекса Python используется для извлечения определенного элемента из коллекции. Подпоследовательность может быть извлечена с помощью оператора среза.
| Python-Operator | Bedeutung | Operator-Funktion | Beispiel |
|---|---|---|---|
| iterable[index] | Liefert das unter dem Index befindliche Element eines Iterable | getitem(iterable, index) | ‘Python'[1] == ‘y’ |
| sequence[start:stop:step] | Liefert ein Slice einer Sequenz | getitem(iterable, slice(start, stop, step)) | ‘Python'[0:1] == ‘Py’, ‘Python'[0:-1:2] == ‘Pto’ |
Операторы индекса и среза Python внутренне используют метод Dunder __getitem__(). Это вызывается либо с числовым индексом, либо с объектом среза:
names = ['Jim', 'Jack', 'John'] names[0] == names.__getitem__(0) names[0:2] == names.__getitem__(slice(0, 2))
Оператор среза удобен тем, что позволяет извлекать подпоследовательность без использования цикла Python for или цикла Python while. Это избавляет программистов от написания кода следующего вида:
word = 'Python' start, stop, step = 0, 5, 2 index, substring = start, '' while index in range(start, stop, step): substring += word[index] index += step # test assert substring == word[start:stop:step]








