Generator als Funktion argument

Kann mir jemand erklären, warum die übergabe eines generator, der nur positionelle argument an eine Funktion zu haben scheint, Besondere Regeln?

Wenn wir haben:

>>> def f(*args):
>>>    print "Success!"
>>>    print args
  1. Dies funktioniert, wie erwartet.
    >>> f(1, *[2])
    Success!
    (1, 2)
  2. Diese nicht funktioniert, wie erwartet.
    >>> f(*[2], 1)
      File "<stdin>", line 1
    SyntaxError: only named arguments may follow *expression
  3. Dies funktioniert, wie erwartet
    >>> f(1 for x in [1], *[2])
    Success! 
    (generator object <genexpr> at 0x7effe06bdcd0>, 2)
  4. Dies funktioniert, aber ich verstehe nicht warum. Sollte es nicht scheitern, in der gleichen Weise wie 2)
    >>> f(*[2], 1 for x in [1])                                               
    Success!
    (generator object <genexpr> at 0x7effe06bdcd0>, 2)
f((*[2, 3]), 1) gibt syntax-Fehler bei * - könnten Sie bitte erläutern Sie Ihre Anregung weiter? Auch, die Frage ist nicht, "wie es funktioniert", sondern "warum funktioniert es so?"
Nicht ein exaktes Duplikat, aber sehr ähnlich aus: stackoverflow.com/questions/12720450/.... TL;DR wie es scheint, ist eine Implementierung detail, es funktioniert einfach so.
Hinweis: Fall 2 sollte in python 3.5+ (aufgrund der PEP 448)
Python 3.5 raus ist, und er erzählt nun, dass der Fall 3 (eigentlich auch der Fall 4) wurde behoben. What ' s new in Python 3.5

InformationsquelleAutor DeTeReR | 2015-09-11

Schreibe einen Kommentar