How to use multiple cases in Match (switch in other languages) cases in Python 3.10
Question:
I am trying to use multiple cases in a function similar to the one shown below so that I can be able to execute multiple cases using match cases in python 3.10
def sayHi(name):
match name:
case ['Egide', 'Eric']:
return f"Hi Mr {name}"
case 'Egidia':
return f"Hi Ms {name}"
print(sayHi('Egide'))
This is just returning None
instead of the message, even if I remove square brackets.
Answers:
According to
What’s New In Python 3.10,
PEP 636, and
the docs,
you use a |
between patterns:
case 'Egide' | 'Eric':
You can use |
(or) to replace ['Egide', 'Eric']
with 'Egide' | 'Eric'
, but you can also match elements belonging to iterables or containers with a guard, as follows:
CONSTANTS = ['a','b', ...] # a (possibly large) iterable
def demo(item):
match item:
case item if item in CONSTANTS:
return f"{item} matched"
case other:
return f"No match for {item}"
I am trying to use multiple cases in a function similar to the one shown below so that I can be able to execute multiple cases using match cases in python 3.10
def sayHi(name):
match name:
case ['Egide', 'Eric']:
return f"Hi Mr {name}"
case 'Egidia':
return f"Hi Ms {name}"
print(sayHi('Egide'))
This is just returning None
instead of the message, even if I remove square brackets.
According to
What’s New In Python 3.10,
PEP 636, and
the docs,
you use a |
between patterns:
case 'Egide' | 'Eric':
You can use |
(or) to replace ['Egide', 'Eric']
with 'Egide' | 'Eric'
, but you can also match elements belonging to iterables or containers with a guard, as follows:
CONSTANTS = ['a','b', ...] # a (possibly large) iterable
def demo(item):
match item:
case item if item in CONSTANTS:
return f"{item} matched"
case other:
return f"No match for {item}"