Почему это важно
Правило: более специфичные исключения должны идти перед более общими. Иначе общий 𝚎𝚡𝚌𝚎𝚙𝚝 «съест» все ошибки, и специфичная обработка не сработает. В современном Python (3.11+) на это даже выдаётся SyntaxWarning. Да pyright подсветит, но в учебном примере я специально убрал подсветку.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍1
Почему это важно
Паттерн 𝚡 𝚘𝚛 𝚍𝚎𝚏𝚊𝚞𝚕𝚝 ломается для любых falsy-значений: 𝟶, "", [], 𝙽𝚘𝚗𝚎, 𝙵𝚊𝚕𝚜𝚎. Безопасная альтернатива — явная проверка: 𝚒𝚏 𝚗𝚊𝚖𝚎 𝚒𝚜 𝙽𝚘𝚗𝚎: 𝚗𝚊𝚖𝚎 = "𝙶𝚞𝚎𝚜𝚝".
Please open Telegram to view this post
VIEW IN TELEGRAM
✍4
👍2💊1
Почему это важно
Звёздочка создаёт иллюзию «гибкости», но фиксированные переменные вокруг неё всё равно требуют своих значений. Это ломает код, когда данные короче ожидаемого, например при парсинге строк или обработке коротких списков.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3❤2
👍4
Почему это важно
Задача показывает, что «неупорядоченность» множеств — не абстракция, а реальное поведение, особенно для строк. Код, который случайно работал на целых числах, может сломаться при переходе на строковые ключи. Если порядок важен — используйте 𝚜𝚘𝚛𝚝𝚎𝚍(𝚜) или другую структуру данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3
👀1
Почему это важно
Многие ожидают, что 𝚒𝚏 𝚋𝚊𝚐 проверит содержимое, но Python не «заглядывает» внутрь объекта автоматически. Пустой список — falsy, но объект, содержащий пустой список — truthy. Чтобы получить ожидаемое поведение, нужно явно добавить __𝚕𝚎𝚗__ или __𝚋𝚘𝚘𝚕__, либо проверять 𝚒𝚏 𝚋𝚊𝚐.𝚒𝚝𝚎𝚖𝚜.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤2
😁1
Почему это важно
Можно ожидать, что 𝚖𝚊𝚡(..., 𝚔𝚎𝚢=𝚏) вернёт 𝚏(𝚡), но это не так. Если нужен именно результат функции, придётся вызвать её отдельно: 𝚊𝚋𝚜(𝚖𝚊𝚡(𝚗𝚞𝚖𝚜, 𝚔𝚎𝚢=𝚊𝚋𝚜)) или 𝚖𝚊𝚡(𝚊𝚋𝚜(𝚡) 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚗𝚞𝚖𝚜).
Please open Telegram to view this post
VIEW IN TELEGRAM
✍8😁1
👍3
Гвидо ван Россум намеренно выбрал округление вниз: при таком подходе остаток всегда попадает в диапазон [𝟶, 𝚗) при положительном делителе. Это удобно для вычисления номера клетки в сетке, индекса в кольцевом буфере, дня недели. Гвидо объяснял: если нужно округление к нулю, можно написать 𝚒𝚗𝚝(𝚊 / 𝚋), а вот получить «правильное» округление вниз из округления к нулю — сложнее, поэтому Python выбрал более полезный вариант по умолчанию.
Почему это важно
При портировании кода между языками или при работе с отрицательными координатами разница в поведении % может привести к трудноуловимым багам: один и тот же код даст разные результаты в Python и в C/Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3