← Retour au blog
tech 13 August 2026

Unraveling the Mystery of Python's Pre-Declared Constants

Python introduces a peculiarity with its pre-declared constants. Discover how these key elements differ and why they are essential for developers.

Article inspired by the original source
python's pre-declared constants are kinda weird ↗ sebsite.pw

Introduction

Python, the programming language often praised for its simplicity and readability, holds a few surprises. Among them are its pre-declared constants. If you are a Python developer, you have likely used constants like True, False, and None. But do you really understand how they work and why they are sometimes so different? Let's delve into these elements to better understand their role and behavior.

Basic Constants

True, False, and None

Let's start with the most well-known: True, False, and None. These are keywords in Python, meaning they cannot be used as variable names. They are treated as lexical tokens, a unique choice in Python that sets them apart from other identifiers. For example, trying to access x.True will raise a syntax error. This peculiarity is due to their resolution at the lexer level rather than by the usual name resolution engine.

__debug__

Moving on to __debug__, a slightly different constant. Although it is generally equal to True, it can be False if Python is run with the -O option, which activates the optimized mode. Unlike the previous three, __debug__ is a normal identifier, but it has the unique property of being unassignable. Attempting to assign a value to __debug__ will raise a syntax error, while trying to assign it as an object attribute will return an AttributeError.

Specialized Constants

Ellipsis and NotImplemented

The other two constants, Ellipsis and NotImplemented, are often less understood. Ellipsis is primarily used in advanced slicing contexts, often in libraries such as NumPy. NotImplemented, on the other hand, serves to indicate that a binary operation (like addition) is not supported for the given object types.

Why These Differences?

The question arises: why do these constants behave differently? The answer likely lies in design choices aimed at optimizing performance and syntactic clarity. In particular, using keywords for True, False, and None prevents any accidental modification, thus ensuring their integrity within the code.

Impact on Developers

Understanding these differences is crucial for Python developers, especially those involved in developing libraries or tools where constant management is critical. For example, knowing that __debug__ cannot be reassigned can help avoid subtle errors when optimizing code.

Conclusion

In sum, Python's pre-declared constants, though seemingly perplexing, play an essential role in the language. They ensure code stability and predictability, two essential qualities for quality software development. Understanding how they work can enhance your mastery of the language and enable you to create more robust applications.

Let's discuss your project in 15 minutes.

Python constants programming keywords development
Deepthix newsletter · 100% AI · every Monday 8am

An AI agent reads tech for you.

Our AI agent scans ~200 sources per week and ships the best articles to your inbox Monday 8am. Free. One click to unsubscribe.

Visit the newsletter page →

Want to automate your operations?

Let's talk about your project in 15 minutes.

Book a call