Ошибки с изменяемыми аргументами в функциях
Сегодня разберем малоизвестную ловушку в Python, связанную с изменяемыми аргументами в функциях. Эта особенность часто приводит к неожиданным багам.
В Python значения по умолчанию для аргументов функций создаются один раз при определении функции, а не при каждом вызове:
Происходит это из-за того что аргумент
Чтобы избежать этого используем None как значение по умолчанию и создаем новый объект внутри функции:
🔥 Такие простые изменения помогут вам избежать непредсказуемого поведения функций
👉 Python Ready | #практика
Сегодня разберем малоизвестную ловушку в 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]
🔥 Такие простые изменения помогут вам избежать непредсказуемого поведения функций