Ошибки с изменяемыми аргументами в функциях



Сегодня разберем малоизвестную ловушку в Python, связанную с изменяемыми аргументами в функциях. Эта особенность часто приводит к неожиданным багам.



В Python значения по умолчанию для аргументов функций создаются один раз при определении функции, а не при каждом вызове:

def append_to_list(item, my_list=[]):  

my_list.append(item)

return my_list



print(append_to_list(1)) # [1]

print(append_to_list(2)) # [1, 2]




Происходит это из-за того что аргумент my_list ссылается на один и тот же объект (список), а не создается заново.



Чтобы избежать этого используем None как значение по умолчанию и создаем новый объект внутри функции:

def append_to_list(item, my_list=None):  

if my_list is None:

my_list = []

my_list.append(item)

return my_list



print(append_to_list(1)) # [1]

print(append_to_list(2)) # [2]




🔥 Такие простые изменения помогут вам избежать непредсказуемого поведения функций



👉 Python Ready | #практика