Qualcuno conosce il ragionamento sul motivo per cui l'operatore unario (*
) non può essere utilizzato in un'espressione che coinvolge iteratori/elenchi/tuple?Python: l'operatore di Splat/Unpack * in python non può essere utilizzato in un'espressione?
Perché è solo limitato al disimballaggio della funzione? o sbaglio nel pensarlo?
Ad esempio:
>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
^
SyntaxError: invalid syntax
Perché l'*
esercente:
[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]
mentre quando l'operatore *
viene utilizzato con una funzione chiamano fa espandere:
f(*[4, 5, 6]) is equivalent to f(4, 5, 6)
Esiste una somiglianza tra lo +
e *
quando si usano gli elenchi ma non quando si estende un elenco con un altro tipo.
Ad esempio:
# This works
gen = (x for x in range(10))
def hello(*args):
print args
hello(*gen)
# but this does not work
[] + gen
TypeError: can only concatenate list (not "generator") to list
Cosa ti aspetti da quell'utilizzo? Voglio dire, perché vorresti farlo? – Lafexlos
ok aggiornamento della mia domanda – Har
Sembra una domanda a parte: il primo è più correlato alla sintassi, il secondo è solo il comportamento di 'list .__ add__' –