[Python] *args vs. [1,2,3]

Daniele Varrazzo piro a develer.com
Lun 16 Mar 2009 16:05:51 CET


On Mon, 16 Mar 2009 15:30:03 +0100, Alessandro Dentella <sandro a e-den.it>
wrote:
> Ciao,
> 
>   ogni tanto scoprio mio malgrado cose elementari che non capisco... 
> 
>   ero convinto che nel passare argomenti ad una funzione, usare *list
fosse
>   equivalente a passare i singoli componenti (ed analogamente per i
>   dizionari) 

si, è uguale in ter
ma vedo che non è così.
> 
>      def test(*args, **kw):
> 	 pass
> 
>      a = [1,2,3]
>      test(1,2,3, junk=True )    # funziona
>      test(*a, junk=True )       # solleva syntax error
> 
>   Quale dovrebbe essere la corretta sintassi della seconda versione?
>   Devo necessariamente usare qualcosa come:
> 
>      test(*a, **{'junk' :True} )       # funziona

test(junk=True, *a) funziona come ti aspetti

è vero che gli argomenti posizionali vanno dopo quelli nominali (quindi
"test(foo=10, 1)" è un errore), ma gli argomenti * e ** vanno comunque
alla fine.

la sintassi completa
(http://docs.python.org/reference/expressions.html#id9) rivela altre
sorprese...

-- Daniele



Maggiori informazioni sulla lista Python