9,3K подписчиков
List astonishment Допустим, мы хотим написать функцию, которая будет принимать на вход список. Естественным ходом выглядит написать что-то вроде: >>> def foo(data=[]): ... data.append(5) ... return data Ждем, что при каждом новом вызовы функции список снова будет пустым. На самом же деле: >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] Вот это поворот! Причина такого поведения в том, что в Python значения дефолтных аргументов вычисляются только один раз -- при объявлении функции. То есть, после того, как инструкция def выполнена, список data уже создан...
2 года назад