Содржина на објавата
У словаря есть полезный метод get() который может "аккуратно" спросить значение по ключу и вернуть что-то по умолчанию если такого ключа не нашлось. Я встречал два способа записать эту логику, очень похожие но имеющие серьезную разницу. По умолчанию, если ключа нет в словаре, метод возвращает None или то что указано в аргументе default. >>> my_dict.get('unknown_key', default=123) 123 >>> my_dict.get('unknown_key') None Нас интересует первый вариант. Его можно записать еще и таким способом >>> my_dict.get('unknown_key') or 123 Чем он отличается от варианта с аргументом default? На первый взгляд ничем. Если ключ не существует, то вернется None. Сработает оператор or и мы получим значение 123. Но основная опасность кроется в операторе or! Дело в том, что значение из аргумента default вернется только если КЛЮЧ ОТСУТСТВУЕТ В СЛОВАРЕ. Если ключ найден, то вернется его значение. Если же мы пишем вариантом с or, то правила меняется. Значение 123 мы получим если ключ отсутствует в словаре или если найденное значение равно False в виде bool. Например, если ключ всё же был найден но значение 0, мы всё равно получим 123, несмотря на то, что 0 может быть вполне валидным значением. >>> d = {"key": 0} >>> d.get("key", 5) 0 >>> d.get("key") or 5 5 # во втором случае неоднозначный результат ⚠️ Будьте внимательны! Точно представляйте, что вы хотите получить от своего кода. #tricks