6.11. Match Subpattern — Python
6.11.1. Problem
>>> user = ('Alice', 'Apricot', 30) >>> >>> if user[0] in ('Alice', 'Bob', 'Carol'): ... lastname = user[1] ... pass ... elif user[0] in ('Dave', 'Eve', 'Mallory'): ... lastname = user[1] ... pass
6.11.2. Solution
>>> user = ('Alice', 'Apricot', 30) >>> >>> match user: ... case [('Alice'|'Bob'|'Carol'), lastname, _]: pass ... case [('Dave'|'Eve'|'Mallory'), lastname, _]: pass
6.11.3. Capture
>>> user = ('Alice', 'Apricot', 30) >>> >>> match user: ... case [('Alice'|'Bob'|'Carol') as firstname, lastname, _]: pass ... case [('Dave'|'Eve'|'Mallory') as firstname, lastname, _]: pass
6.11.4. Use Case - 1
Game Controller
Test Setup:
>>> class Hero: ... def move_horizontal(self, direction, value): ... ... def move_vertical(self, direction, value): ... >>> >>> hero = Hero()
Use Case:
>>> action = ['move', 'left', 10] >>> >>> match action: ... ... case ['move', ('up'|'down') as direction, value]: ... hero.move_vertical(direction, value) ... ... case ['move', ('left'|'right') as direction, value]: ... hero.move_horizontal(direction, value) ... ... case _: ... raise ValueError('Invalid direction')