- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
# https://www.opennet.ru/opennews/art.shtml?num=53248
# Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом
# Отмечается, что предложенные операторы позволят улучшить читаемость кода,
# упростят сопоставление произвольных Python-объектов и отладку, а также повысят
# надёжность кода благодаря возможности расширенной статической проверки типов.
def http_error(status):
match status:
case 400:
return "Bad request"
case 401|403|404:
return "Not allowed"
case 418:
return "I'm a teapot"
case _:
return "Something else"
# Например, возможна распаковка объектов, кортежей, списков и произвольных последовательностей
# для привязки переменных на основе имеющихся значений. Допускается определение вложенных
# шаблонов, использование в шаблоне дополнительных условий "if", применение масок ("[x, y, *rest]"),
# маппинга связок ключ/значение (например, {"bandwidth": b, "latency": l} для извлечения значений
# "bandwidth" и "latency" и словаря), извлечения подшаблонов (оператор ":="), использования именованных
# констант в шаблоне. В классах возможна настройка поведения при сопоставлении при помощи метода "__match__()".
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def whereis(point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")
match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diagonal")
RED, GREEN, BLUE = 0, 1, 2
match color:
case .RED:
print("I see red!")
case .GREEN:
print("Grass is green")
case .BLU
E:
print("I'm feeling the blues :(")