Los misterios de las constantes predefinidas de Python

Python's pre-declared constants are kinda weird

Python define seis constantes predefinidas: True, False, None, __debug__, Ellipsis y NotImplemented. Aunque parecen uniformes, cada una se comporta de manera distinta: algunas son palabras clave, otras son builtins reasignables, y __debug__ es un identificador único que no puede ser asignado. Este artículo explora estas diferencias con ejemplos de código, revelando peculiaridades del lenguaje y casos límite que desafían las expectativas.

Así que, en cierto sentido, '...' es una constante real, pero 'Ellipsis' no lo es. Raro, ¿verdad?
  1. Revanche1367

    Muchas decisiones de diseño de Python me han parecido raras y fuera de lugar, pero durante mucho tiempo lo han justificado diciendo que son esos pequeños detalles feos de diseño los que hacen que el lenguaje sea tan usable y efectivo en la práctica en comparación con lenguajes mejor diseñados que casi nadie usa. No soy lo suficientemente experto para decir claramente si eso es realmente cierto, pero en mi opinión, hay un patrón repetido de lenguajes ligeramente extraños que se vuelven super populares: Python, Javascript, quizás también C. O tal vez solo notamos la rareza porque estos lenguajes se usan tanto y se les busca hasta el más mínimo detalle sin fin.

  2. jherskovic

    Python tiene algunas bibliotecas absolutamente increíbles, incluso sin C. Tiene Django, para aquellos de nosotros que disfrutamos desarrollando aplicaciones web pero nunca pudimos enamorarnos de Ruby on Rails. Y Django es asombroso. Tampoco he visto un mejor lenguaje para escribir scripts y pipelines de ETL rápidos. Además, un 'necesito un script para $TAREA_DE_SYSADMIN pero quiero poder leerlo más tarde'. Cualquier cosa dominada por latencias externas (web, bases de datos, etc.) será lo suficientemente rápida para muchos usos en Python.

    Claro, no es un lenguaje para escribir un navegador web o un motor de juegos. Y es lento. Pero tiene nichos muy fuertes fuera del ML/ciencia de datos. Personalmente, me encanta. Cada uno con lo suyo.

  3. zahlman

    Pasado: https://news.ycombinator.com/item?id=49284392 (con mi comentario), https://news.ycombinator.com/item?id=49250370 .

    Qué bueno ver que esta vez recibe atención.

  4. nneonneo

    La constante __debug__ es realmente extraña: cualquier bloque de código protegido con `if __debug__:` será omitido por completo del bytecode bajo PYTHONOPTIMIZE=1. Esto y `assert` son los únicos dos ejemplos de 'compilación condicional' real en Python. Esta es también la razón por la que no puedes asignar a __debug__: hacerlo haría posible invalidar la suposición del compilador sobre las sentencias `if __debug__:`.

  5. neillyons

    Recuerdo haber leído que en las primeras versiones de Python no había True y False incorporados. Cada usuario lo implementaba por su cuenta como

    True = 1

    False = 0

    y luego estos se agregaron al lenguaje. En Python 2 todavía podías reasignarlos e intercambiarlos para que 'if False' ¡fuera realmente verdadero!

    True, False = False, True

    En Python 3 ya no podías reasignarlos.

  6. gucci-on-fleek

    Si cuentas las versiones preliminares, en realidad hay 7 constantes predeclaradas, ya que Python 3.15 (planeado para noviembre [0]) añade una nueva constante "TYPE_CHECKING" que debería comportarse como "Ellipsis" y "NotImplemented" lo hacen ahora [1].

    [0]: https://peps.python.org/pep-0790/#schedule

    [1]: https://peps.python.org/pep-0781/#backwards-compatibility

  7. hmokiguess

    Python es horrible. Hay tantos casos únicos en las bibliotecas, ninguna se pone de acuerdo en un estilo, es lento, y es demasiado fácil hacer lo incorrecto. A menudo trabajo con científicos de datos y tengo que llevar sus cuadernos de Jupyter a producción, lo cual es un infierno puro de suboptimalidad. Supongo que debe ser una buena curva de aprendizaje fácil para investigación/borrador.

  8. YuechenLi

    Python es un lenguaje tan extraño en general a pesar de su popularidad que honestamente no puedo recomendar a nadie que empiece a programar que elija Python como su primer lenguaje, contrario a los sentimientos populares. Quiero decir, fui una de las primeras personas en empezar a usar Python cuando estaba en la escuela de posgrado hace casi una década, cuando todos los demás en mi campo todavía usaban Matlab para su código de laboratorio, por la simple razón de que Numpy era menos horrible que Matlab y necesitaba algo que pudiera imprimir gráficos fácilmente a PDFs.

    Lo único bueno que puedo decir de Python hoy en día es que es fácil de empezar durante los primeros cinco minutos, y luego tienes que lidiar con toda su rareza: espacios significativos, veracidad, tipado de pato, GIL, distribución/empaquetado, etc., etc.

    Fui un gran fan de Julia como el posible reemplazo de Python para la ciencia durante mucho tiempo y lo había evangelizado bastante antes, pero recientemente me he convencido cada vez más de que JIT/despacho múltiple solo era bueno si ya sabes programar bien para empezar, lo cual para muchos académicos que no trabajan en ciencias de la computación, escriben código bastante horrible. Creo que puede ser mejor omitir Python por completo y escribir tu código en un lenguaje de tipado estático desde el principio.

Más de este día

2026-08-25