Switch case statements are very popular conditional control statements in almost all programming languages. But surprisingly this is not available in python.
[Edit] – This article was written during the time when the match-case support was not present in python. Now the latest version supports switch-case functionality. The details of match-case statement can be found from the official documentation.
Question: Is there any switch case statements in python ?
Answer: The direct answer is NO [Edited] till version python 3.9. Python 3.10 onwards, match-case support is available in Python which is equivalent to switch-case statement.
Alternative options for switch case statements in python
Option 1: Using If – elif – else statements. An example is given below.
if case == "case1": execute_func_case1() elif case == "case2": execute_func_case2() elif case == "case3": execute_func_case3() else: execute_default_func()
Wow. Excellent. The above code looks good right ?. It works exactly like switch-case statements, then why need switch-case statements in Python ?
Have you noticed a problem ?. The above if-elif-else conditions are fine as long as we have less number of cases. Imagine the situation with 10 or more elif conditions. Now you got the problem right ?.
Lets try the second option
Option 2: Using List in Python as an alternative to switch case statements
An example is given below.
def add(a, b): return a + b def sub(a, b): return a-b case_funcs = [add, sub] case_funcs[0](1, 2) case_funcs[1](1, 2)
In the above program, we don’t have to use if-elif-else blocks, instead, we can call using the position or index of the list and call the function. This looks better than the previous option right ?. But what about the default case ?. Also what if someone types an option greater than the size of the list ?. It will throw exception and there is no way to handle default case.
Option 3: Using Dictionary as alternative to switch case statements in python
An example is given below.
def add(a, b): return a + b def sub(a, b): return a-b case_funcs = {'sum':add, 'subtract':sub} case_funcs['sum'](1,2)
Here the implementation is much similar to the switch case statement. We use a key to identify or route to the required case or function. The keys can be anything and are not limited by the indices or positions.
Now lets talk about the drawbacks of the above implementation. The above method will throw KeyError if we pass an unknown key. Also there is no default case statement. How will we handle these problems?
Check the below program
def add(a, b): return a + b def sub(a, b): return a-b def default(a, b): return "Default Return" case_funcs = {'sum':add, 'subtract':sub} # sum is the key for the add(). # default is the default function that gets called for non existent keys # (1, 2) are the arguments for the function print(case_funcs.get('sum',default)(1,2))
Python dictionary has a get() method that returns the value based on the key. This has one more feature. We can configure a default value for non-existent keys. Wow now we got the solution.
So by using this feature, we can implement the switch-case like feature in python.