2012-04-03 17 views

risposta

13

All'interno delle parentesi che formano l'operatore funzione di chiamata, la virgola non è per costruire tuple, ma per separare gli argomenti. Pertanto, type(3,) equivale a type(3). Una ulteriore virgola alla fine dell'elenco degli argomenti è consentita dalla grammatica. Avete bisogno di un paio di parentesi per costruire una tupla:

>>> def f(x): 
...  print x 
... 
>>> f(3) 
3 
>>> f(3,) 
3 
>>> f((3,)) 
(3,) 
6

L'integrato type() è una funzione, quindi la virgola viene analizzata come separatore di argomenti anziché come un costruttore di tupla.

>>> type(3,) 
<type 'int'> 

>>> type((3,)) 
<type 'tuple'> 
+1

Indipendentemente dal numero di argomenti 'f' necessari, la virgola verrà analizzata come separatore di argomenti. –

+0

Hai ragione - l'ho appena verificato dalla mia parte. Modificherà. –

2

Ho il sospetto Python ignora una virgola finale in argomenti della funzione:

def f (a): 
    print a 
    print type(a) 

>>> f(3,) 
3 
<type 'int'> 

Utilizzando valori separati da virgole senza parentesi per creare una tupla è un trucco che non funziona ovunque. Di lista è un buon esempio:

>>> [a,a*2 for a in range(4)] 
    File "<stdin>", line 1 
    [a,a*2 for a in range(4)] 
      ^

Devi fare questo:

>>> [(a,a*2) for a in range(4)] 
[(0, 0), (1, 2), (2, 4), (3, 6)] 

Lista spacchettamento funziona bene, però, quindi è un po 'variabile in cui sono consentiti, i valori non limitati separati da virgole:

>>> [(a,b) for a, b in zip(range(4),range(4))] 
[(0, 0), (1, 1), (2, 2), (3, 3)] 
0

in func(bunch_of_args) si è permesso di seguire l'ultimo arg con una virgola, proprio come in

alist = [1, 2, 3, ] 
Problemi correlati