Что выводит функция при нескольких вызовах

Будут напечатаны [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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее