Введение
В этой лабораторной работе вы получите практическое понимание приоритета операторов (operator precedence) в Python. Подобно математике, Python следует определенным правилам для определения порядка выполнения операций внутри выражения. Твердое понимание этих правил необходимо для написания кода, который будет одновременно корректным и предсказуемым.
Мы начнем с изучения приоритета базовых арифметических операторов. Затем мы увидим, как операторы более высокого уровня, такие как возведение в степень (exponentiation) и сравнение (comparison), вписываются в эту иерархию. Наконец, вы узнаете, как использовать круглые скобки для изменения порядка операций по умолчанию — это ключевой прием как для контроля вычислений, так и для повышения читаемости кода.
Базовый приоритет арифметических операций
В Python, как и в стандартной математике, некоторые арифметические операторы имеют более высокий приоритет, чем другие. В частности, умножение (*) и деление (/) выполняются перед сложением (+) и вычитанием (-). Когда операторы имеют одинаковый приоритет, они вычисляются слева направо.
Давайте понаблюдаем за этим поведением. Процесс настройки уже создал для вас файл. В проводнике файлов WebIDE слева найдите и откройте файл с именем operator_precedence.py, расположенный в каталоге ~/project.
Добавьте следующий код в файл:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
Это выражение содержит сложение, умножение, вычитание и деление. Спрогнозируем порядок операций:
- Python сначала выполнит умножение:
4 * 3равно12. - Затем он выполнит деление:
10 / 5равно2.0. Обратите внимание, что стандартное деление в Python 3 всегда дает число с плавающей точкой (float). - Теперь выражение выглядит как
10 + 12 - 2.0. - Наконец, он выполнит сложение и вычитание слева направо:
10 + 12равно22, а22 - 2.0равно20.0.
Сохраните файл, нажав Ctrl + S. Чтобы запустить код, откройте терминал в WebIDE (Terminal -> New Terminal) и выполните следующую команду:
python ~/project/operator_precedence.py
Вы увидите вычисленный результат, напечатанный в терминале.
20.0
Результат совпадает с нашим прогнозом, что подтверждает приоритет умножения и деления над сложением и вычитанием.
Операторы более высокого уровня
Иерархия операторов Python выходит за рамки базовой арифметики. Оператор возведения в степень (**) имеет более высокий приоритет, чем умножение и деление. Более того, все арифметические операторы имеют более высокий приоритет, чем операторы сравнения, такие как "больше чем" (>).
Давайте добавим в наш скрипт больше примеров, чтобы увидеть это в действии. Измените файл ~/project/operator_precedence.py, добавив два новых выражения:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
Проанализируем новые строки:
- В выражении
2 * 3 ** 2сначала вычисляется возведение в степень3 ** 2, что дает9. Затем выполняется умножение2 * 9, что дает18. - В выражении
18 > 5 + 10сначала вычисляется сложение5 + 10, что дает15. Затем оценивается сравнение18 > 15, которое возвращаетTrue.
Сохраните файл (Ctrl + S) и снова запустите скрипт.
python ~/project/operator_precedence.py
В терминале теперь отобразятся результаты всех трех выражений.
20.0
18
True
Это подтверждает, что Python сначала вычисляет возведение в степень, затем другие арифметические операции и, наконец, операции сравнения.
Использование скобок для управления порядком вычислений
Хотя правила приоритета Python последовательны, сложные выражения могут быть трудны для чтения. Чтобы переопределить порядок по умолчанию или просто сделать ваши намерения ясными, вы можете использовать круглые скобки (). Любое выражение, заключенное в скобки, вычисляется первым.
Давайте изменим один из наших предыдущих примеров, чтобы увидеть эффект круглых скобок. Добавьте новое выражение в конец файла ~/project/operator_precedence.py.
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
## Using parentheses to change the order of evaluation.
forced_result = (10 + 4) * 3
print(forced_result)
Проанализируем новую строку (10 + 4) * 3:
- Поскольку
10 + 4находится в скобках, оно вычисляется первым, что дает14. - Затем выполняется умножение
14 * 3, что дает42.
Это отличается от 10 + 4 * 3, которое, как мы знаем, вычисляется как 22. Круглые скобки полностью изменили результат.
Сохраните файл и запустите скрипт в последний раз.
python ~/project/operator_precedence.py
В выводе теперь будет включен результат нашего выражения в скобках.
20.0
18
True
42
Использование круглых скобок, даже когда это строго не необходимо, является хорошей практикой. Это делает порядок операций явным, что улучшает читаемость кода и снижает вероятность ошибок, вызванных неправильным пониманием приоритетов.
Резюме
В этой лабораторной работе вы изучили фундаментальную концепцию приоритета операторов в Python. Вы начали с базовой арифметики, подтвердив, что умножение и деление имеют более высокий приоритет, чем сложение и вычитание. Затем вы узнали, что другие операторы, такие как возведение в степень и сравнение, занимают свое место в иерархии.
Самое главное, вы попрактиковались в использовании круглых скобок для явного управления порядком вычисления. Этот навык жизненно важен для написания кода, который не только функционально корректен, но и понятен для других. Освоив приоритет операторов, вы сделали значительный шаг к написанию более надежных и стабильных программ на Python.



