yield - Aussage oder Ausdruck?

8

Also, ich habe dies gelesen und herausgefunden, wie man Werte sendet zu erzeugen.

Und jetzt bin ich irgendwie verwirrt. Gibt es eine Aussage oder einen Ausdruck? Es verwendet keine Klammern-Syntax, wie Funktionen, so dass es wie eine Anweisung aussieht. Aber es gibt Wert zurück, also ist es wie Ausdruck.

Vor nicht allzu langer Zeit hatte ich diese Unterhaltung über "Warum Python nicht hat, wenn x = foo (): (...) '?" (Warum können wir nicht in If-Bedingung zuweisen). Ich sagte, dass Aussagen atomar sind, also Zuweisung Anweisung und wenn Anweisung sollte getrennt werden. Jetzt weiß ich nicht mehr, was ich denken soll.

== EDIT ==

Ich habe meinen fairen Anteil am Lesen.

Ссылка - "Das value-Argument wird zum Ergebnis des aktuellen Ertragsausdrucks. "

Also, Ertrag hat Wert. Ich bekomme es, dass alle Dokumente sagen, dass es eine Aussage ist, aber wenn Aussage kann Wert haben, was zum Teufel ist der Unterschied zwischen Ausdruck und Aussage?

Ich weiß auch, was Generatoren, Coroutinen usw. sind. Ich brauche Meta-Semantik oder Semantik für Dokumente: D

== Letzte Antwort ==

Offenbar kann Ertrag beides sein. Lesen Sie einfach diese Antworten: (1) und (2) - Ich fand sie sehr hilfreich.

    
Filip Malczak 22.11.2013, 10:22
quelle

3 Antworten

10

yield ist ein Ausdruck . Es war früher eine Anweisung und wird meistens als ganze Anweisung verwendet, aber in Python 2.5 wurde es als Teil der neuen Coroutinenunterstützung in einen Ausdruck umgewandelt. Es wird immer noch allgemein als die "Yield Statement" bezeichnet, teilweise aufgrund veralteter Dokumentation und Wissen und teilweise weil es meistens als eine Aussage verwendet wird. Sie können darüber in PEP 342 nachlesen.

Abgesehen von den folgenden Formen:

%Vor%

Ein Yield-Ausdruck muss an jeder Stelle geklammert werden, um Unklarheiten in der Syntax zu vermeiden.

    
user2357112 22.11.2013, 10:39
quelle
4

Nach der Grammatik :

%Vor%

und

%Vor%

Das heißt, yield x kann beides sein, abhängig vom Kontext:

%Vor%

Diese Ausdruck / Aussage-Dualität mag verwirrend sein, ist aber völlig im Sinne von Python, vergleiche for loops vs for comprehensions, if Aussage vs. bedingten Operator, lambda vs def .

    
georg 22.11.2013 10:41
quelle
2

yield ist eine Aussage.

Es ist jedoch ein guter Punkt, den Sie über diese Syntax machen: x = (yield y) . Von meinem Kopf her kann ich nicht an andere Statements in Python denken, die so verwendet werden können.

Es ist nützlich, die Dokumentation zu lesen und natürlich dieses legendäre Frage .

    
shx2 22.11.2013 10:23
quelle

Tags und Links