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)

questionAnswers(1)

yourAnswerToTheQuestion