[Python] *args vs. [1,2,3]
Alessandro Dentella
sandro a e-den.it
Lun 16 Mar 2009 16:52:42 CET
On Mon, Mar 16, 2009 at 03:46:47PM +0100, Manlio Perillo wrote:
...
> > dizionari) 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
> >
>
> Stai facendo confusione su cosa faccia f(*a).
non mi pare proprio...
> E' chiamato scompattamento della lista di argomenti:
> http://docs.python.org/tutorial/controlflow.html#tut-unpacking-arguments
>
> def f(a, b, c):
> print a, b, c
>
> a = [1, 2, 3]
> f(*a)
ed è ben così che l'ho usata anche nell'esempio
On Mon, Mar 16, 2009 at 04:05:51PM +0100, Daniele Varrazzo wrote:
> test(junk=True, *a) funziona come ti aspetti
questo lo avevo notato, ma il mio cervello lo ha filtrato, avendo presente che
> è vero che gli argomenti posizionali vanno dopo quelli nominali (quindi
> "test(foo=10, 1)" è un errore),
già..
> ma gli argomenti * e ** vanno comunque alla fine.
ecco la parte che mi mancava!
Leggendo la documentazione che mi hai indicato::
consequence of this is that although the *expression syntax may appear
after some keyword arguments, it is processed before the keyword arguments
dice solo *may appear*, non *must appear*, bisogna leggere con attenzione la
grammatica per cogliere quello mi era sfuggito!
grazie
*:-)
Maggiori informazioni sulla lista
Python