Оператор as позволяет установить псевдоним для значения шаблона или для всего шаблона. Простейший пример:
def print_person(person): match person: case "Tom" | "Tomas" | "Tommy" as name: print(f"Name: {name}") case _: print("Undefined") print_person("Tom") # Name: Tom print_person("Tomas") # Name: Tomas print_person("Bob") # Undefined
Здесь первый шаблон соответствует трем строкам: "Tom" | "Tomas" | "Tommy". После набора значений идет оператор as, после которого указывается псевдоним. И вне зависимости от того, какая именно строка передана, она окажется в переменной name.
Псевдоним можно применять как для отдельного значения шаблона, так и для всего шаблона:
def print_person(person): match person: case ("Tom" | "Tomas" as name, 37 | 38 as age): # псевдонимы для отдельных значений print(f"Tom| Name: {name} Age: {age}") case ("Bob" | "Robert", 41 | 42) as bob: # псевдоним для всего шаблона print(f"Bob| Name: {bob[0]} Age: {bob[1]}") case _: print("Undefined") print_person(("Tomas", 38)) # Tom| Name: Tomas Age: 38 print_person(("Robert", 41)) # Bob| Name: Robert Age: 41
Обычно псевдонимы более применимы в каких-то более сложных по структуре данных. Например:
class Person: __match_args__ = ("name", "age") def __init__(self, name, age): self.name = name self.age = age def print_family(family): match family: case (Person() as husband, Person() as wife): print(f"Husband. Name: {husband.name} Age: {husband.age}") print(f"Wife. Name: {wife.name} Age: {wife.age}") case _: print("Undefined") print_family((Person("Tom", 37), Person("Alice", 33))) # Husband. Name: Tom Age: 37 # Wife. Name: Alice Age: 33 print_family((Person("Sam", 28), Person("Kate", 25))) # Husband. Name: Sam Age: 28 # Wife. Name: Kate Age: 25
Здесь функция print_family принимает кортеж, который должен состоять из двух элементов Person. В первом шаблоне определяем для первого элемента псевдоним husband, а для второго - псевдоним wife. Затем, используя эти псевдонимы, мы можкем обращаться к их атрибутам.