Назад к вопросам
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 выведет текущее состояние изменяемого дефолтного аргумента, который сохраняет изменения между вызовами.