Sobes.tech
Назад к вопросам
Middle
1

Объясните поведение функции с mutable default argument (изменяемым аргументом по умолчанию). Что выведут принты?

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

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

sobes.tech AI

В Python изменяемые аргументы по умолчанию (например, списки или словари) инициализируются один раз при определении функции, а не при каждом её вызове. Это значит, что если внутри функции вы изменяете такой аргумент, то при последующих вызовах функция будет использовать уже изменённый объект, а не новый.

Пример:

def func(a, my_list=[]):
    my_list.append(a)
    print(my_list)

func(1)  # Выведет: [1]
func(2)  # Выведет: [1, 2]
func(3)  # Выведет: [1, 2, 3]

Здесь my_list сохраняет изменения между вызовами, что часто приводит к ошибкам.

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

def func(a, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(a)
    print(my_list)

Теперь при каждом вызове создаётся новый список.