Hacker News Digest

25 августа 2026 г. в 21:39 • sebsite.pw • ⭐ 156 • 💬 144

OriginalHN

#builtins#constants#debug#ellipsis#false#none#notimplemented#python#syntax#true

Python's pre-declared constants are kinda weird

Python имеет шесть предопределённых «констант», но все они ведут себя по-разному из-за исторических и синтаксических решений. True, False и None — это лексические токены, а не имена: их нельзя переопределить, даже через setattr(builtins, ...), и попытка написать x.True вызывает SyntaxError, потому что это не допускается синтаксисом. При этом они всё ещё существуют как атрибуты builtins, но их значения игнорируются при прямом использовании.

__debug__ — уникальный случай: это обычный идентификатор, но его нельзя ни присвоить, ни удалить — даже как атрибут, и даже при -O он остаётся неизменным в контексте выполнения. При этом x.__debug__ даёт AttributeError, а не SyntaxError, потому что синтаксически корректен. Ellipsis и NotImplemented — просто встроенные переменные, которые можно перезаписать: NotImplemented = 67 работает. Однако ... (эквивалент Ellipsis) остаётся неизменным, как лексический токен, в то время как имя Ellipsis — нет. Это создаёт странное несоответствие: один и тот же объект доступен через два механизма с разной степенью защиты.