Sobes.tech
Назад к вопросам
Senior
8

Что выведет каждый print в функции с мутабельным дефолтным аргументом?

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

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

sobes.tech AI

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

Пример на Python:


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

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

Объяснение:

  • При первом вызове func(1) используется дефолтный список [], в который добавляется 1.
  • При втором вызове func(2) используется тот же самый список, теперь уже [1], и добавляется 2.
  • При вызове func(3, ['x']) передается новый список ['x'], поэтому изменения не влияют на дефолтный.
  • При последнем вызове func(4) снова используется дефолтный список, который теперь содержит [1, 2], и добавляется 4.

Таким образом, каждый print выведет текущее состояние изменяемого дефолтного аргумента, который сохраняет изменения между вызовами.