Gerador como argumento de função
Alguém pode explicar por que passar um gerador como o único argumento posicional para uma função parece ter regras especiais?
Se tiver-mos:
>>> def f(*args):
>>> print "Success!"
>>> print args
Isso funciona, como esperado.
>>> f(1, *[2])
Success!
(1, 2)
Isso não funciona, conforme o esperado.
>>> f(*[2], 1)
File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression
Isso funciona, como esperado
>>> f(1 for x in [1], *[2])
Success!
(generator object <genexpr> at 0x7effe06bdcd0>, 2)
Isso funciona, mas não entendo o porquê. Não deveria falhar da mesma maneira que 2)
>>> f(*[2], 1 for x in [1])
Success!
(generator object <genexpr> at 0x7effe06bdcd0>, 2)