Может ли кто-нибудь объяснить, почему передача генератора в качестве единственного позиционного аргумента функции, по-видимому, имеет специальные правила?
Если мы имеем:
>>> def f(*args):
>>> print "Success!"
>>> print args
-
Это работает, как и ожидалось.
>>> f(1, *[2]) Success! (1, 2)
-
Это не работает, как и ожидалось.
>>> f(*[2], 1) File "<stdin>", line 1 SyntaxError: only named arguments may follow *expression
-
Это работает, как ожидалось
>>> f(1 for x in [1], *[2]) Success! (generator object <genexpr> at 0x7effe06bdcd0>, 2)
-
Это работает, но я не понимаю, почему. Если это не так, как 2)
>>> f(*[2], 1 for x in [1]) Success! (generator object <genexpr> at 0x7effe06bdcd0>, 2)