Sobes.tech
Middle
28

Можно ли в Python задать дефолтное значение аргумента функции списком и какие проблемы это может вызвать?

Компании, где спрашивали
ДомкликДомклик

Ответ от нейросети

sobes.tech AI

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

def func(a, lst=[]):
    lst.append(a)
    return lst

Однако это может привести к неожиданному поведению, потому что дефолтные значения вычисляются один раз при определении функции, а не при каждом вызове. В результате, если изменять этот список внутри функции, изменения сохранятся между вызовами:

print(func(1))  # [1]
print(func(2))  # [1, 2] — список не пустой, а накопленный

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

def func(a, lst=None):
    if lst is None:
        lst = []
    lst.append(a)
    return lst

Так каждый вызов функции будет работать с новым списком, что предотвращает нежелательное накопление данных.