Управление потоком Python

Управление потоком Python

Управление потоком — это порядок, в котором выполняются или оцениваются отдельные операторы, инструкции или вызовы функций. Управление потоком программы Python регулируется условными операторами, циклами и вызовами функций.

Операторы сравнения

ОператорЗначение
==Равно
!=Не равно
<Меньше чем
>Больше чем
<=Меньше или равно
>=Больше или равно

Эти операторы возвращают True или False в зависимости от предоставленных вами значений.

Примеры:

42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'dog' != 'cat'
True
42 == 42.0
True
42 == '42'
False
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Чему равно выражение 'hello' == 'Hello'?
A. True
B. False
C. None
D. Вызывает ошибку

Логические операторы

Существует три логических оператора: and, or и not. В порядке приоритета, от высшего к низшему: not, and и or.

Таблица истинности для оператора and:

ВыражениеВозвращает
True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

Таблица истинности для оператора or:

ВыражениеВозвращает
True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

Таблица истинности для оператора not:

ВыражениеВозвращает
not TrueFalse
not FalseTrue

Смешивание операторов

Вы можете смешивать логические операторы и операторы сравнения:

(4 < 5) and (5 < 6)
True
(4 < 5) and (9 < 6)
False
(1 == 2) or (2 == 2)
True

Вы также можете использовать несколько логических операторов в одном выражении вместе с операторами сравнения:

2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
# В приведенном ниже операторе сначала выполняется 3 < 4 and 5 > 5, что дает False
# Затем 5 > 4 возвращает True, поэтому результат после True or False будет True
5 > 4 or 3 < 4 and 5 > 5
True
# Теперь сначала выполняется выражение в скобках, поэтому True and False возвращает False.
(5 > 4 or 3 < 4) and 5 > 5
False

Операторы if

Оператор if оценивает выражение, и если это выражение равно True, он выполняет следующий блок кода с отступом:

# оператор if: выполнить блок кода, когда условие истинно
name = 'Debora'

if name == 'Debora':  # Проверить, равно ли имя 'Debora'
   print('Hi, Debora')  # Эта строка выполняется, если условие True
Hi, Debora
if name != 'George':
   print('You are not George')
You are not George

Оператор else выполняется только в том случае, если оценка выражений if и всех выражений elif равна False:

# if-else: выполнить разный код в зависимости от условия
name = 'Debora'

if name == 'George':
   print('Hi, George.')
else:  # Выполняется, если условие if ложно
   print('You are not George')
You are not George
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Когда выполняется блок else в операторе if-else?
A. Всегда
B. Только когда условие if (и все условия elif, если они есть) равны False
C. Только когда условие if равно True
D. Никогда

Только после того, как выражение оператора if окажется False, оператор elif будет оценен и выполнен:

# if-elif: проверка нескольких условий по порядку
name = 'George'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':  # Проверяется, только если предыдущее условие ложно
   print('Hi George!')
Hi George!

части elif и else являются необязательными.

name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')
Who are you?

Тернарный условный оператор

Многие языки программирования имеют тернарный оператор, который определяет условное выражение. Наиболее распространенное использование — создание краткого, простого оператора присваивания с условием. Другими словами, он предлагает однострочный код для вычисления первого выражения, если условие истинно, и в противном случае вычисляет второе выражение.

<expression1> if <condition> else <expression2>

Пример:

age = 15

# этот оператор if:
if age < 18:
   print('kid')
else:
   print('adult')
kid
# Тернарный оператор: однострочное условное выражение
# Синтаксис: значение_если_истинно if условие else значение_если_ложно
print('kid' if age < 18 else 'adult')
kid

Тернарные операторы могут быть соединены в цепочку:

age = 15

# этот тернарный оператор:
print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
teen
# эквивалентен этому оператору if:
if age < 13:
    print('kid')
else:
    if age < 18:
        print('teen')
    else:
        print('adult')
teen

Оператор Switch-Case

Операторы Switch-Case

В языках программирования оператор switch — это тип механизма управления выбором, используемый для изменения потока управления выполнением программы путем поиска и сопоставления значения переменной или выражения.

Операторы Switch-Case, или Структурное сопоставление шаблонов (Structural Pattern Matching), были впервые представлены в 2020 году через PEP 622 и официально выпущены с Python 3.10 в сентябре 2022 года.

Официальное руководство

[PEP 636](https://peps.python.org/pep-0636/) предоставляет официальное руководство по сопоставлению шаблонов Python или операторам Switch-Case.

Сопоставление отдельных значений

response_code = 201
match response_code:
    case 200:
        print("OK")
    case 201:
        print("Created")
    case 300:
        print("Multiple Choices")
    case 307:
        print("Temporary Redirect")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")
    case 502:
        print("502 Bad Gateway")
Created

Сопоставление с шаблоном или (or Pattern)

В этом примере символ вертикальной черты (| или or) позволяет Python возвращать один и тот же ответ для двух или более случаев.

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
Internal Server Error

Сопоставление по длине итерируемого объекта

today_responses = [200, 300, 404, 500]
match today_responses:
    case [a]:
            print(f"One response today: {a}")
    case [a, b]:
            print(f"Two responses today: {a} and {b}")
    case [a, b, *rest]:
            print(f"All responses: {a}, {b}, {rest}")
All responses: 200, 300, [404, 500]

Значение по умолчанию

Символ подчеркивания (_) используется для определения случая по умолчанию:

response_code = 800
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")
Invalid Code

Сопоставление встроенных классов

response_code = "300"
match response_code:
    case int():
            print('Code is a number')
    case str():
            print('Code is a string')
    case _:
            print('Code is neither a string nor a number')
Code is a string

Защита операторов Match-Case (Guarding)

response_code = 300
match response_code:
    case int() if response_code > 99 and response_code < 500:
            print('Code is a valid number')
    case _:
            print('Code is an invalid number')
Code is a valid number

Операторы цикла while

Оператор while используется для повторяющегося выполнения до тех пор, пока выражение истинно:

# цикл while: повторять код, пока условие истинно
spam = 0
while spam < 5:  # Продолжать, пока spam меньше 5
    print('Hello, world.')
    spam = spam + 1  # Увеличить счетчик, чтобы избежать бесконечного цикла
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает цикл while?
A. Повторяет код, пока условие True
B. Выполняет код ровно один раз
C. Выполняет код фиксированное количество раз
D. Пропускает выполнение кода

Операторы break

Если выполнение достигает оператора break, оно немедленно выходит из блока цикла while:

# оператор break: немедленно выйти из цикла при обнаружении
while True:  # Бесконечный цикл
    name = input('Please type your name: ')
    if name == 'your name':
        break  # Немедленно выйти из цикла

print('Thank you!')
Please type your name: your name
Thank you!

Операторы continue

Когда выполнение программы достигает оператора continue, выполнение программы немедленно переходит к началу цикла.

# оператор continue: пропустить оставшуюся часть итерации цикла и начать следующую итерацию
while True:
    name = input('Who are you? ')
    if name != 'Joe':
        continue  # Перейти к следующей итерации, не запрашивать пароль
    password = input('Password? (It is a fish.): ')
    if password == 'swordfish':
        break  # Выйти из цикла, когда пароль верен

print('Access granted.')
Who are you? Charles
Who are you? Debora
Who are you? Joe
Password? (It is a fish.): swordfish
Access granted.

Цикл For

Цикл for перебирает list, tuple, dictionary, set или string:

# цикл for: итерация по каждому элементу в последовательности
pets = ['Bella', 'Milo', 'Loki']
for pet in pets:  # Цикл по каждому питомцу в списке
    print(pet)  # Печать имени каждого питомца
Bella
Milo
Loki
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что перебирает цикл for?
A. Только числа
B. Только строки
C. Любая итерируемая последовательность (список, кортеж, словарь, множество и т. д.)
D. Только списки

Функция range()

Функция range() возвращает последовательность чисел. Она начинается с 0, увеличивается на 1 и останавливается перед указанным числом:

for i in range(5):
    print(f'Will stop at 5! or 4? ({i})')
Will stop at 5! or 4? (0)
Will stop at 5! or 4? (1)
Will stop at 5! or 4? (2)
Will stop at 5! or 4? (3)
Will stop at 5! or 4? (4)
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что генерирует range(5)?
A. Числа от 1 до 5
B. Числа от 0 до 4
C. Числа от 0 до 5
D. Пять случайных чисел

Функция range() также может изменять свои 3 значения по умолчанию. Первые два будут значениями start (начало) и stop (конец), а третье будет аргументом step (шаг). Шаг — это величина, на которую увеличивается переменная после каждой итерации.

# range(start, stop, step)
for i in range(0, 10, 2):
   print(i)
0
2
4
6
8

Вы даже можете использовать отрицательное число в качестве аргумента step, чтобы цикл for считал в обратном порядке, а не по возрастанию.

for i in range(5, -1, -1):
    print(i)
5
4
3
2
1
0

Оператор For else

Это позволяет указать оператор для выполнения в случае полного выполнения цикла. Это полезно только тогда, когда в цикле может произойти условие break:

for i in [1, 2, 3, 4, 5]:
   if i == 3:
       break
else:
   print("only executed when no item is equal to 3")

Завершение программы с помощью sys.exit()

Функция exit() позволяет завершить работу Python.

import sys

while True:
    feedback = input('Type exit to exit: ')
    if feedback == 'exit':
        print(f'You typed {feedback}.')
        sys.exit()
Type exit to exit: open
Type exit to exit: close
Type exit to exit: exit
You typed exit.

Связанные ссылки