Hier sind die Schritte zum Hinzufügen eines ternären Operators zu CPython. Dieser Artikel verwendet Python 3.10. Weitere Informationen zum CPython-Build und zur Dateistruktur finden Sie unter hier.
Die ternären Python-Operatoren sind: In Python steht (Wert, wenn Bedingung wahr ist) an erster Stelle, (Bedingung) an nächster Stelle und schließlich (Wert, wenn Bedingung falsch ist). Es ist nicht üblich, dass (Bedingung) in der Syntax des ternären Operators in der Mitte liegt.
(Wert, wenn die Bedingung wahr ist) if (Bedingungen) else (BedingungenがFalseのときの値)
Der modifizierte ternäre Operator lautet wie folgt. (Bedingung) kommt zuerst, dann (Wert, wenn Bedingung wahr ist) und schließlich (Wert, wenn Bedingung falsch ist). In der Sprache C usw. werden die ternären Operatoren in dieser Reihenfolge beschrieben.
if (Bedingungen) then (BedingungenがTrueのときの値) else (BedingungenがFalseのときの値)
Grammer/python.gram
a = disjunction 'if' b=disjunction 'else' c=expression { _Py_IfExp(b, a, c, EXTRA) }
Grammer/python.gram
'if' a = disjunction 'then' b=disjunction 'else' c=expression { _Py_IfExp(a, b, c, EXTRA) }
$ make regen-pegen
Wert, wenn die Bedingung Falsch ist 2.3 Codeänderung Lassen Sie uns nun den ternären Python-Operator auf den in 2.2 gezeigten ändern. Der ternäre Operator ist bereits in Python vorhanden. Sie können dies also verwenden und denselben Prozess aufrufen, wenn dann etwas anderes eintritt. Hier wird nur python.gram geändert. Es gibt die folgende Beschreibung in L341 von Grammer / python.gram. Dies ist eine Beschreibung des ursprünglichen ternären Python-Operators. Um dies nachzuahmen, schreiben Sie den modifizierten ternären Operator in die folgende Zeile. Achten Sie hier beim Aufrufen von _Py_IfExp auf die Reihenfolge der Variablen. Sie können den ternären Operator hinzufügen, indem Sie die obigen Änderungen ausführen und neu erstellen. Natürlich können Sie auch die ursprüngliche Syntax des ternären Operators verwenden.
Der durch die obigen Änderungen implementierte ternäre Operator funktioniert wie folgt.
Erkundung umfangreicher Software
Dies ist eine experimentelle Site.
CPython
CPython-Repository
24. Ändern der CPython-Grammatik
Eine Checkliste zum Hinzufügen von Funktionen zu CPython wurde hinzugefügt, um Ihnen das Verständnis der Struktur von CPython zu erleichtern.
Recommended Posts