In Python habe ich oft die Funktion yield
gesehen, die benutzt wurde, um einen Generator zu erzeugen. Sowohl diese Funktion als auch die Funktion print
führen beide die Aktion von Methoden aus, da sie einen Wert zurückgeben. Beim Wechsel von Python 2 zu Python 3 erhielt die Funktion print
jedoch Klammern wie bei einem normalen Methodenaufruf, die Ausbeute blieb jedoch gleich. Außerdem erhält yield
eine gelbliche Farbe eines reservierten Schlüsselworts, während print
das Purpur einer reservierten Methode ist. Warum wird yield
nicht als Methode betrachtet und so eingefärbt, dass keine Klammern verwendet werden?
(Warum hat return
in ähnlicher Weise auch keine Klammern?)
Lassen Sie mich noch etwas hinzufügen, yield und continue werden in vielen anderen Sprachen nicht mit Klammern versehen. Ich wollte nur wissen, was es anders macht, als es reserviert ist. Es gibt viele andere reservierte Methoden, die Klammern erhalten.
Also habe ich nach einer Antwort gegraben. Und es stellt sich heraus, dass es eins gibt . Von PEP 255, dem Pep, der uns das Schlüsselwort yield
gab
%Vor%Q. Warum ein neues Keyword für "yield"? Warum nicht eine eingebaute Funktion?
A. Kontrollfluss wird viel besser über Schlüsselwort in Python ausgedrückt, und Ausbeute ist ein Kontrollkonstrukt. Es wird auch als effizient erachtet Die Implementierung in Jython erfordert, dass der Compiler dazu in der Lage ist Bestimmen Sie mögliche Aufhängepunkte zur Kompilierzeit und eine neue Stichwort macht das einfach. Die CPython Referenzimplementierung auch nutzt es stark aus, um zu erkennen, welche Funktionen sind Generator- Funktionen (obwohl ein neues Schlüsselwort anstelle von "def") das lösen würde für CPython - aber Leute fragen das "warum ein neues Schlüsselwort?" Frage will kein neues Schlüsselwort).
Q: Warum nicht eine andere spezielle Syntax ohne ein neues Schlüsselwort? Zum Beispiel, eines davon anstelle von "yield 3":
A: Habe ich einen vermisst? Aus Hunderten von Nachrichten zählte ich drei schlug eine solche Alternative vor und extrahierte das obige von ihnen. Es wäre schön, kein neues Keyword zu benötigen, aber schöner, um Ertrag zu machen sehr klar - ich möchte nicht folgern, dass eine Rendite ist aus dem Sinn einer zuvor sinnlosen Folge von Schlüsselwörter oder Operatoren. Wenn dies jedoch genügend Interesse weckt, Befürworter sollten sich auf einen einzigen Konsensvorschlag und Guido festlegen wird darauf aussprechen.
print
war keine Funktion, die Klammern erhielt: Es ging von einer Aussage zu einer Funktion über. yield
ist immer noch eine Aussage, wie return
. Die Syntaxhervorhebung ist spezifisch für Ihre Entwicklungsumgebung.
Weitere Informationen zu der Unterschied zwischen Ausdrücken und Aussagen hier und mehr über den Unterschied zwischen Funktionen und Aussagen hier . Siehe auch die Dokumentation zu einfachen Anweisungen und Verbindungsanweisungen .
yield
ist keine Funktion, es ist ein Schlüsselwort und benötigt keine Klammern nach seine Grammatik -
yield_atom ::="(" yield_expression ")"
yield_expression ::="yield" [ausdruck_liste]
print
war früher eine Anweisung in Python 2, wurde aber in Python 3 als integrierte Funktion mit PEP 3105
print
war ein Schlüsselwort , definiert durch die Sprachspezifikation in Python 2 und wurde zu einer eingebauten Funktion (definiert durch die Standardbibliothek) Spezifikation) Python 3. yield
war und ist immer noch ein Schlüsselwort .
Tags und Links python python-3.x python-2.7 yield-keyword