🖥 Что будет выведено после второго вызова append() в коде ниже?



>>> def append(list=[]):

... # добавление длины списка в список

... list.append(len(list))

... return list

...

>>> append(['a','b'])

['a', 'b', 2]

>>>

>>> append() # вызов без аргумента использует значение list по умолчанию []

[0]

>>>

>>> append() # Но что произойдёт при повторном вызове append без аргумента?




Ответ

Когда значением по умолчанию для аргумента функции является выражение, оно вычисляется только один раз, а не всегда при вызове функции. Таким образом, после того как аргумент list был инициализирован в пустой массив, последующие вызовы функции без аргументов продолжат использовать тот же самый массив, что был инициализирован изначально.



>>> append() # при первом вызове без аргумента используется значение по умолчанию []

[0]

>>> append() # но затем...

[0, 1]

>>> append() # последовательные вызовы расширяют список по умолчанию

[0, 1, 2]

>>> append() # и так продолжается...

[0, 1, 2, 3]




@python_job_interview