
What is the Point?
The match/case statement in Python is used to implement switch-case like characteristics and if-else functionalities. It was introduced in Python 3.10. The match statement compares a given variable’s value to different shapes, also referred to as patterns, until it fits into one. Once a matching case clause is found, the code inside that case clause is run. If there is no matching case clause for the expression, the code under the default clause case other gets executed.
Here’s the general syntax:
match expression:
case value1:
# statements
case value2:
# statements
...
case other:
# statementsExplanation:
- The
matchkeyword starts a block of code that takes an expression as an argument. The expression can be any valid Python object, such as a variable, a literal, a function call, etc. - The
casekeyword introduces a pattern that is compared to the expression. The pattern can also be any valid Python object or a combination of objects using operators such as|(or),as(alias), and_(wildcard). If the pattern matches the expression, the statements following the:are executed. The statements can be any valid Python code, such asprint,return,break, etc. - The
otherkeyword is used to specify a default case that is executed if none of the other patterns match. It is equivalent to using_as a pattern
The most basic example:
x = 1 + 1
match x:
case 1:
print("x is 1")
case 2:
print("x is 2")
case other:
print("No match found")Output:
x is 2More Advanced Examples
Matching multiple values in one case
This example uses the | operator to match multiple values in one case clause:
user = input("Write your username: ")
match user:
case "A" | "B" | "C":
print("You are not allowed to access the database!")
case "Boss":
print("You are allowed to access the database!")
case other:
print("You are not a company member, you are not allowed to access the code!")Output (may vary):
Write your username: A
You are not allowed to access the database!Binding a variable to the matched value
This example demonstrates how to use the as operator to bind a variable to the matched value:
command = input("Enter a command: ")
match command.split():
case ["go", direction] as result:
print(f"You chose to go {direction}.")
case ["look"]:
print("You look around.")
case other:
print(f"Invalid command: {command}")Output (depends on your input):
Enter a command: go foward
You chose to go foward.Using match/case within a function
Here is an example that uses the match/case statement to check the types of something being passed in:
def print_type(value):
match value:
case int():
print("It's an integer.")
case str():
print("It's a string.")
case list():
print("It's a list.")
case dict() as d:
print(f"It's a dictionary with {len(d)} keys.")
case _:
print("I don't know what it is.")
# try the function
print_type(1)
# It's an integer.
print_type("Sling Academy!")
# It's a string.
print_type([1, 2, 3])
# It's a list.
print_type({"a": 1, "b": 2})
# It's a dictionary with 2 keys.
print_type(1.0)
# I don't know what it is.This print_type() function takes a value as an argument and uses the match/case statement to compare it to different types using the () operator. If the value is an instance of a type, the corresponding case is executed. The as operator is used to bind a variable to the matched value, which can be used inside the case block. The _ operator is used as a wildcard to handle any other value.