Skip to content

Latest commit

 

History

History
35 lines (30 loc) · 857 Bytes

20220910100519.md

File metadata and controls

35 lines (30 loc) · 857 Bytes

avoid mutable default arguments

In Python default argument values are evaluated once upon module load.

This means that if all_numbers is not provided in the example below, it keeps appending to the same default list that was initiated when the program started!

Another datetime example: https://gist.github.com/pybites/749358550803b24018b15cf7dab04b21

>>> def sum_numbers(number, all_numbers=[]):
...     all_numbers.append(number)
...     return sum(all_numbers)
...
>>> sum_numbers(1, [2, 3])
6
>>> sum_numbers(1)
1
>>> sum_numbers(2)  # oops, should return 2!
3
>>> def sum_numbers(number, all_numbers=None):
...     if all_numbers is None:
...         all_numbers = []
...     all_numbers.append(number)
...     return sum(all_numbers)
...
>>> sum_numbers(1)
1
# ok now
>>> sum_numbers(2)
2
>>> sum_numbers(3)
3

#functions #anti-patterns