4.8. Match Mapping
A mapping pattern looks like {"user": user, "emails": [*emails]}
.
It matches mappings with at least the set of provided keys, and if all
the sub-patterns match their corresponding values. It binds whatever
the sub-patterns bind while matching with the values corresponding
to the keys. Adding **others
at the end of the pattern to capture
extra items is allowed.
SetUp:
>>> def login_user(firstname, lastname): ...
>>> def login_admin(firstname, lastname): ...
Usage:
>>> user = {'role': 'admin', 'firstname': 'Mark', 'lastname': 'Watney'}
>>>
>>> match user:
... case {'role': 'admin', 'firstname': firstname, 'lastname': lastname}:
... login_admin(firstname, lastname)
...
... case {'role': 'user', 'firstname': firstname, 'lastname': lastname}:
... login_user(firstname, lastname)
4.8.1. Args, Kwargs
>>> user = {'role': 'admin', 'firstname': 'Mark', 'lastname': 'Watney'}
>>>
>>> match user:
... case {'role': 'admin', **data}: login_admin(**data)
... case {'role': 'user', **data}: login_user(**data)