# why is the following invalid
x = (k, v for k, v in some_dict.items())
# but if we wrap the expression part in parentheses it works
x = ((k, v) for k, v in some_dict.items())
Ich schaute durch die Dokumentation und schien nichts dabei zu finden? Was könnte den Parser so verwirren, dass die Syntax nicht erlaubt ist? Trotz etwas noch komplexere Arbeits:Warum sind nicht-behandelte Tupel in Generatoren im Ausdrucksfeld nicht erlaubt?
# k, v somehow confuses the parser but this doesnt???
x = ('%s:%s:%s' % (k, v, k) for k, v in some_dict.items())
wie kommen wir nicht brauchen %s:%s:%s % (k, v, k)
mit einer umgebenden Klammern wickeln auch dann?
Warum wäre 'v für k, v in some_dict.items()' kein gültiger Generatorausdruck? Ich sehe nichts falsch daran. – Wombatz
@Wombatz siehe das Zitat aus der PEP; Um ein Tupel mit einem Wert und einem Genexp zu erstellen, müssen Sie das Genxp in einen anderen Klammersatz einfügen. Aus dem Zusammenhang heraus ist dieses Genexp in Ordnung, aber in diesem Zusammenhang ist es ein Fehler. Das ist das Gleiche, als ob Sie es als Argument für eine Funktion verwenden, die Sie auch einige andere Argumente übergeben - Sie können 'sum (f (x) für x in ...)' tun, müssen aber 'sum ((f (x) für x in ....), start = '') '. – lvc
"Aus dem Zusammenhang, das genexp ist in Ordnung". Das habe ich gemeint, danke für die Klarstellung. Es schien, dass der Ausdruck selbst nicht gültig ist. – Wombatz