Pythons vordeklarierte Konstanten sind seltsam

Python's pre-declared constants are kinda weird

Python kennt sechs vordeklarierte Konstanten: True, False, None, __debug__, Ellipsis und NotImplemented. Doch sie verhalten sich alle unterschiedlich: True, False und None sind Schlüsselwörter, __debug__ ist eine spezielle Kennung, der man nicht zuweisen kann, und Ellipsis und NotImplemented sind nur normale Builtins. Der Artikel untersucht diese Unterschiede und zeigt überraschende Effekte, etwa dass man builtins.True überschreiben kann, ohne dass sich der Wert von True ändert.

In gewissem Sinne ist ... also eine echte Konstante, Ellipsis aber nicht. Seltsam, oder?
  1. Revanche1367

    Viele Designentscheidungen in Python haben sich für mich seltsam und falsch angefühlt, aber sie haben es lange damit gerechtfertigt, dass es genau diese kleinen hässlichen Designentscheidungen sind, die die Sprache in der Praxis so brauchbar und effektiv machen, im Vergleich zu besser designten Sprachen, die kaum jemand benutzt. Ich bin nicht genug Experte, um klar zu sagen, ob das wirklich stimmt, aber meiner Meinung nach gibt es ein wiederkehrendes Muster von leicht seltsam designten Sprachen, die super populär werden: Python, JavaScript, vielleicht auch C. Oder vielleicht bemerken wir die Seltsamkeit nur, weil diese Sprachen so viel benutzt werden und bis zum Erbrechen kritisiert werden.

  2. jherskovic

    Python hat einige absolut fantastische Bibliotheken, sogar ohne C. Es hat Django, für diejenigen von uns, die gerne Web-Apps entwickeln, aber sich nie in Ruby on Rails verlieben konnten. Und Django ist großartig. Ich habe auch noch keine bessere Sprache für schnelle ETL-Skripte und Pipelines gesehen. Außerdem ein 'Ich brauche ein Skript für $SYSADMIN_TASK, aber ich möchte es später noch lesen können.' Alles, was von externen Latenzen dominiert wird (Web, Datenbanken, etc.), wird in Python für viele Anwendungen schnell genug sein.

    Klar, es ist keine Sprache, um einen Webbrowser oder eine Game-Engine zu schreiben. Und es ist langsam. Aber es hat einige sehr starke Nischen außerhalb von ML/Data Science. Persönlich liebe ich es. Jedem das Seine.

  3. zahlman

    Vergangenheit: https://news.ycombinator.com/item?id=49284392 (mit meinem Kommentar), https://news.ycombinator.com/item?id=49250370 .

    Schön zu sehen, dass es diesmal Aufmerksamkeit bekommt.

  4. nneonneo

    Die __debug__-Konstante ist wirklich seltsam – jeder Codeblock, der mit `if __debug__:` geschützt ist, wird unter PYTHONOPTIMIZE=1 vollständig aus dem Bytecode entfernt. Dies und `assert` sind die einzigen beiden Beispiele für echte "bedingte Kompilierung" in Python. Das ist auch der Grund, warum man __debug__ nicht zuweisen kann: Wenn man das täte, könnte man die Annahme des Compilers über `if __debug__:`-Anweisungen ungültig machen.

  5. neillyons

    Ich erinnere mich, gelesen zu haben, dass es in frühen Versionen von Python kein eingebautes True und False gab. Jeder Benutzer implementierte das selbst als

    True = 1

    False = 0

    und später wurden diese zur Sprache hinzugefügt. In Python 2 konnte man sie immer noch neu zuweisen und vertauschen, sodass 'if False' tatsächlich wahr war!

    True, False = False, True

    In Python 3 konnte man sie nicht mehr neu zuweisen.

  6. gucci-on-fleek

    Wenn man Vorabversionen mitzählt, gibt es tatsächlich 7 vordeklarierte Konstanten, da Python 3.15 (geplant für November [0]) eine neue Konstante "TYPE_CHECKING" hinzufügt, die sich wie "Ellipsis" und "NotImplemented" verhalten soll [1].

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

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

  7. hmokiguess

    Python ist schrecklich. Es gibt so viele Einzelfälle in Bibliotheken, keiner ist sich über einen Stil einig, es ist langsam, und es ist viel zu einfach, das Falsche zu tun. Ich arbeite oft mit Datenwissenschaftlern und muss ihre Jupyter-Notebooks produktionsreif machen, was pure suboptimale Hölle ist. Ich schätze, es muss eine gute, einfache Lernkurve für Forschung/Notizzettel sein.

  8. YuechenLi

    Python ist einfach so eine seltsame Sprache im Allgemeinen, trotz seiner Beliebtheit, dass ich ehrlich gesagt niemandem empfehlen kann, der mit dem Programmieren anfängt, Python als erste Sprache zu wählen, entgegen der populären Meinung. Ich meine, ich war einer der Ersten, die Python benutzten, als ich vor fast einem Jahrzehnt im Graduiertenstudium war, als alle anderen in meinem Feld immer noch Matlab für ihren Lab-Code benutzten, einfach weil Numpy weniger schrecklich war als Matlab und ich etwas brauchte, das einfach Grafiken als PDFs ausgeben konnte.

    Das Einzige Gute, das ich heutzutage über Python sagen kann, ist, dass es leicht ist, in den ersten fünf Minuten loszulegen, und dann muss man sich mit all seiner Seltsamkeit auseinandersetzen: signifikante Leerzeichen, Truthiness, Duck Typing, GIL, Distribution/Packaging, etc., etc.

    Ich war lange Zeit ein großer Fan von Julia als potenziellem Ersatz für Python für die Wissenschaft und habe es früher viel propagiert, aber in letzter Zeit bin ich immer mehr überzeugt, dass JIT/Multiple Dispatch nur gut ist, wenn man bereits gut programmieren kann, was für viele Akademiker, die nicht in der Informatik arbeiten, ziemlich schrecklichen Code schreibt. Ich denke, es könnte besser sein, Python ganz zu überspringen und den Code von Anfang an in einer statisch typisierten Sprache zu schreiben.

Mehr von diesem Tag

2026-08-25