Назад к вопросам
JuniorКодОчень часто
Что выведет этот изменяемый аргумент по умолчанию?
Предскажите вывод этих двух вызовов.
def add(item, bucket=[]):
bucket.append(item)
return bucket
print(add(1))
print(add(2))Определите вывод и объясните.
[1], затем [1, 2]. Список [] по умолчанию создаётся один раз, в момент определения функции, и переиспользуется между вызовами, поэтому состояние «протекает». Решение через сентинел: def add(item, bucket=None): bucket = [] if bucket is None else bucket.
- Думать, что аргументы по умолчанию вычисляются заново при каждом вызове
- Ожидать новый список на каждый вызов
- Не знать решение через сентинел None
- Почему аргументы по умолчанию вычисляются в момент определения, а не вызова?
- Как именно паттерн с сентинелом
Noneэто исправляет?