I learned this from learn-python3
Example :
def append_if_multiple_of_five(number, magical_list=[]):
if number % 5 == 0:
magical_list.append(number)
return magical_list
print(append_if_multiple_of_five(100))
print(append_if_multiple_of_five(105))
print(append_if_multiple_of_five(123))
print(append_if_multiple_of_five(123, []))
print(append_if_multiple_of_five(123))
Result :
[100]
[100, 105]
[100, 105]
[]
[100, 105]
So default parameters in Python are shared between function calls if it isn't passed from caller. So be careful because shared mutable object can affect your logic between function calls, where MAGIC was born !
One safe way to achieve the goal, use None
as replacement like this
def append_if_multiple_of_five(number, magical_list=None):
if not magical_list:
magical_list = []
if number % 5 == 0:
magical_list.append(number)
return magical_list
print(append_if_multiple_of_five(100))
print(append_if_multiple_of_five(105))
print(append_if_multiple_of_five(123))
print(append_if_multiple_of_five(123, []))
print(append_if_multiple_of_five(123))
Result :
[100]
[105]
[]
[]
[]