TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5038 815
Как отличить отсутствие аргумента от None в Python

Если None — допустимое значение настройки, оно не подходит для обозначения «аргумент не передали». Маркер MISSING = object() решает эту задачу, но после deepcopy или pickle может превратиться в другой объект: проверка через is перестанет работать.

В Python 3.15 появляется встроенный sentinel. Объявление MISSING = sentinel("MISSING") даёт читаемую сигнатуру, позволяет использовать сам маркер в аннотации типа и сохраняет его идентичность при копировании.

Для pickle маркер должен быть доступен по имени в модуле: имя внутри sentinel обязано совпадать с именем переменной. Создавайте его один раз. Два вызова sentinel("MISSING") возвращают разные объекты, даже если строка одинакова.

#python #типизация
More from @zen_of_python
  1. Oct 8, 2026Почему цикл внутри теста скрывает часть ошибок Тест перебирает десять входов и проверяет р…
  2. Oct 8, 2026Как выполнять CPU-задачи в отдельных интерпретаторах Python В Python 3.14 InterpreterPoolE…
  3. Oct 7, 2026security.txt в Django: контакт для сообщений об уязвимостях Исследователь нашёл уязвимость…
  4. Oct 6, 2026Как открывать ссылки Django-сайта в приложениях Apple и Android Для этого нужна двусторонн…
  5. Oct 6, 2026Как собрать Rust-проект с Python-модулем и отдельной программой В пошаговом примере кальку…
  6. Oct 6, 2026Как упаковать Python-проект в библиотеку и CLI Копирование модулей и правки sys.path можно…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →