Почему этот код печатает 'B'
@python_quizРазберем этот квиз
Исходный фрагмент:

Кратко: программа выведет B. Ниже — подробный разбор почему и какие подводные камни стоит учитывать.
Шаг за шагом
- config.get('retries') возвращает 0. В Python целое 0 считается ложным (falsy).
- Оператор and реализует короткое замыкание: если левый операнд ложен, правый не вычисляется и всё выражение целиком считается ложным.
- Поэтому проверка внутри if не проходит, выполняется ветка else и печатается 'B'.
Важно: выражение читается так, что левый операнд проверяется первым, и при его ложности правая часть не выполняется — именно это и решает исход результата.
Анализ вариантов (коротко)
- "Выведет 'A'": неверно, потому что левый операнд (0) — ложь, выражение не может быть истинным.
- "Выведет 'B'": верно — выполняется else.
- "Ничего не выведет": неверно — есть печать в else, так что вывод будет.
- "Будет исключение
TypeError": неверно — здесь нет операций, которые вызвали быTypeError.
Демонстрация разных сценариев
Покажем, как меняется поведение при других значениях:

Ожидаемые результаты:
- Первый вызов — B (как в исходном примере).
- Второй — B (правый операнд дает False).
- Третий — A (оба условия истинны).
Частые ошибки и лучшие практики
- Не полагайтесь на неявную проверку "is not None" вместе с truthy-проверкой, если хотите явно проверить наличие значения. Выражение с and может вести себя неожиданно, если одно значение равно 0, пустой строке, пустому списку и т.д.
- Для явной проверки "не None" используйте сравнение для каждого параметра:

- Если цель — проверить, что retries положительное число, пишите это явно:

Вывод
Короткое замыкание оператора and и ложное значение 0 приводят к тому, что в примере выполняется ветка else и печатается 'B'. Чтобы избежать двусмысленности и ошибок, делайте проверки явными — особенно когда нулевые или пустые значения имеют особое значение в логике программы.