Будут напечатаны [1] и [2]. При каждом вызове строка all_numbers = [] создаёт новый список, независимо от переданного аргумента или значения по умолчанию.
Что выводит функция при нескольких вызовах
Будут напечатаны [1] и [2]. При каждом вызове строка all_numbers = [] создаёт новый список, независимо от переданного аргумента или значения по умолчанию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой результат будет напечатан после выполнения указанных ниже вызовов функции.
def func(number, all_numbers=None):
all_numbers = []
all_numbers.append(number)
print(all_numbers)
func(1) # ?
func(2) # ?
Ответ
Будут напечатаны [1] и [2]. При каждом вызове строка all_numbers = [] создаёт новый список, независимо от переданного аргумента или значения по умолчанию.
Проблемы общего изменяемого default здесь нет: default равен None. Зато функция безусловно игнорирует аргумент all_numbers, даже если вызывающий передал существующий список. Если нужно создавать список только при его отсутствии, используют if all_numbers is None: all_numbers = []. В текущей версии функция ничего явно не возвращает, поэтому результат вызова равен None; списки лишь выводятся через print.