@Xymis

Необязательные аргументы функции Python?

Всем привет, сегодня столкнулся с интересной вещью, в виде вывода этой программы:
def func(element, array = []):
    array.append(element)
    return array

print(func(1))
print(func(2))
print(func(3))
print(func(4))

Результат:
>> [1]
>> [1, 2]
>> [1, 2, 3]
>> [1, 2, 3, 4]

По-быстрому полистал учебник Лутца, но даже не нашел в какой теме это искать, кто может попробовать объяснить, как вообще происходит эта магия? Где хранится значение array , почему оно не обнуляется при каждом вызове функции? Если вы знаете что искать по этому вопросу - буду так же рад наименованием тегов вопроса)
Всем заранее спасибо
  • Вопрос задан
  • 2322 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Вот и видно, что по-быстрому. Глава 17 «Области видимости и вложенные функции» и раздел «Типичные ошибки при работе с функциями» в конце. Значение параметра по умолчанию создаётся один раз, при определении функции, а не при каждом её вызове.
Ответ написан
longclaps
@longclaps
Вот оно где хранится:
print(func.__defaults__)
А про mutable Pavel Denisov разъяснил.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы