Загружаем изображение…

🐍 Ловушка с аргументами по умолчанию



Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции?

def append_to(num, target=[]):
target.append(num)
return target

print(append_to(1))
print(append_to(2))
Варианты ответа:

1. [1] и [2]
2. [1] и [1, 2]
3. Ошибка SyntaxError

⬇️ Правильный ответ и объяснение ⬇️


Правильный ответ: 2 — [1] и [1, 2]

Почему?
В Python аргументы по умолчанию вычисляются один раз при определении функции, а не при каждом вызове. Список target создается один раз и сохраняет свое состояние между вызовами.

✅ Как исправить?
Используйте None в качестве значения по умолчанию:

def append_to(num, target=None):
if target is None:
target = []
target.append(num)
return target


Подписывайтесь на канал 👉 @python_of
Просмотры: 429
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти