"Was sind die Vorteile der Verwendung des Schlüsselworts def für Generatoren und Funktionen?"
Während sie sich mechanisch unterscheiden, sind sie in der Praxis, wenn ich sie benutze, für mich konzeptionell oft gleich (ich denke nicht viel darüber nach, range()vs zu nennen xrange()).
Um schnell zu verstehen, worum es bei der Funktion geht, stimme ich zu, dass bei der Verwendung von etwas verloren geht def, aber die Dinge sollten innerhalb der Funktion zunächst nicht zu verschleiert sein.
Sogar ein Impliziter return Nonekann das beabsichtigte Verhalten einer Funktion nach einer langen Reihe von Bedingungen verwirren (wie in, war ein return Nonebeabsichtigtes Verhalten oder ein Versehen in der Logik). Aber das sind nur meine Überzeugungen darüber.
Ich glaube nicht, dass meine Argumentation besonders überzeugend ist, deshalb werde ich mich nur PEP 255 zuwenden :
Problem: Fügen Sie anstelle von "def" ein anderes neues Schlüsselwort (z. B. "gen" oder "generator") ein oder ändern Sie auf andere Weise die Syntax, um Generatorfunktionen von Nicht-Generatorfunktionen zu unterscheiden.
Con: In der Praxis (wie Sie über sie denken), Generatoren sind
Funktionen, aber mit dem Drall , dass sie fortsetzbar. Die Mechanik ihrer Einrichtung ist ein vergleichsweise kleines technisches Problem, und die Einführung eines neuen Schlüsselworts würde die Mechanik des Starts von Generatoren (ein wichtiger, aber winziger Teil des Lebens eines Generators) nicht überbetonen.
Pro: In Wirklichkeit (wie Sie über sie denken) sind Generatorfunktionen tatsächlich Fabrikfunktionen, die Generator-Iteratoren wie von Zauberhand erzeugen. In dieser Hinsicht unterscheiden sie sich radikal von Nicht-Generator-Funktionen und verhalten sich eher wie ein Konstruktor als wie eine Funktion. Die Wiederverwendung von "def" ist daher bestenfalls verwirrend. Eine im Körper vergrabene "Yield" -Anweisung ist nicht genug Warnung, dass die Semantik so unterschiedlich ist.
BDFL: "def" bleibt es. Kein Argument auf beiden Seiten ist absolut überzeugend, daher habe ich die Intuition meines Sprachdesigners konsultiert. Es sagt mir, dass die im PEP vorgeschlagene Syntax genau richtig ist - nicht zu heiß, nicht zu kalt. Aber wie das Orakel bei Delphi in der griechischen Mythologie sagt es mir nicht warum, so dass ich keine Gegenargumente für die Argumente gegen die PEP-Syntax habe. Das Beste, was ich mir einfallen lassen kann (abgesehen davon, dass ich den bereits gemachten Widerlegungen zustimme), ist "FUD". Wenn dies vom ersten Tag an Teil der Sprache gewesen wäre, bezweifle ich sehr, dass es Andrew Kuchlings "Python Warts" -Seite gemacht hätte.