2022-11-09
#python
Условные конструкции и сопоставление структурных шаблонов
Условные конструкции
if
a = 8
if a > 3:
print('Ok')
# Ok
if a > 10
print('Ok')
#
Однострочная форма if
if a > 3: print('Ok')
# Ok
if a > 3: print('Ok'); print('a > 3')
# Ok
# a > 3
if-else
if a > 10:
print('Ok')
else:
print('Not Ok')
# Not Ok
Вложенные условные конструкции
if isinstance(a, (int, float)):
if a > 0:
print('Positive')
else:
print('Not positive')
else:
print('NaN')
# Positive
Тренарные операторы
a if a > 0 else 0
# 8
('AM', 'PM')[a >= 12]
Вложенные тренарные операторы
(
a if a > 0 else
0 if a < 0 else
-a
)
# 8
if-elif-else
if a > 8:
print('Ok')
elif a > 3:
print('Almost Ok')
else:
print('Not Ok')
'Almost Ok'
match-case
Паттерны(шаблоны)
Буквальный паттерн (англ. literal)
Это число, строка, булево значение или None
.
match value:
case 0:
...
case "zero":
...
case True:
...
Паттерн захвата (англ. capture)
Позволяет захватить переменную. Захваченную переменную можно использовать внутри соответствующего блока.
match value
case x:
print(f'The x is {x}')
case [a, b]:
print(a + b)
Подстановочный паттерн (англ. wildcard)
Обозначается нижним подчеркиванием - _. Он подходит к любому субъекту, но не может захватить какие-то переменные субъекта.
value = 'aaa'
match value:
case 0:
print('zero')
case _:
print('Not a zero')
# Not a zero
Паттерны классов
Используются для доступа к аттрибутам класса.
match frame
case LeftFrame(size, color="orange"):
...
Комбинированные паттерны
Вертикальная черта |
эквивалентна or
.
match n
case (0 | 1):
...
Страж (англ. guard)
Условное выражение, позволяющее выполнить блок кода только если оно возвращает True
.
match value
case [x, *rest] if x == 0:
...
case [x, *rest] if x > 0:
...
case _:
...
Стражи недопустимы во вложенных паттернах.
Возможно будет интересно
2022-11-09
Продвинутый
Шпаргалка по модулю itertools
Шпаргалка по всем функциям модуля itertools, создающим разнообразные итераторы.
2022-10-28