Гвіда ван Рассум (Guido van Rossum)
Новая рэалізацыя шмат у чым нагадвае аператар "match", які прадстаўляецца ў мовах Scala, Rust і F#, які выконвае параўнанне выніку выканання паказанага выразы са спісам узораў, пералічаных у блоках на аснове аператара "case". У адрозненне ад аператара "switch", даступнага ў мовах Сі, Java і JavaScript, выразы на аснове "match" прапануюць значна больш
def http_error(status):
match status:
case 400:
return "Bad request"
case 401|403|404:
return "Не магчыма"
case 418:
return "I'm a teapot"
case _:
return «Something else»
Напрыклад, магчымая распакаванне аб'ектаў, картэжаў, спісаў і адвольных паслядоўнасцяў для прывязкі зменных на аснове наяўных значэнняў. Дапускаецца вызначэнне ўкладзеных шаблонаў, выкарыстанне ў шаблоне дадатковых умоў «if», ужыванне масак («[x, y, *rest]»), мапінга звязкаў ключ/значэнне (напрыклад, {«bandwidth»: b, «latency»: l} для вымання значэнняў «bandwidth» і «latency» і слоўніка), вымання падшаблонаў (аператар «:=»), выкарыстанні найменных канстант у шаблоне. У класах магчымая настройка паводзін пры супастаўленні пры дапамозе метаду "__match__()".
ад 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 :(«)
Для рэцэнзавання падрыхтаваны набор
Крыніца: opennet.ru