2012-04-03 36 views

Respuesta

13

dentro de los paréntesis que forman el operador de llamada de función, la coma es no para la construcción de tuplas, pero para separar argumentos. Por lo tanto, type(3,) es equivalente a type(3). La gramática permite una coma adicional al final de la lista de argumentos. Es necesario un par extra de parens para construir una tupla:

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

La función integrada type() es una función, por lo que la coma se analiza como un separador de argumentos en lugar de un constructor de tuplas.

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

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

Independientemente de la cantidad de argumentos 'f', la coma se analizará como un separador de argumentos. –

+0

Tienes razón, acabo de verificar eso por mi parte. Editaré –

2

Sospecho Python ignora una coma al final de argumentos de la función:

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

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

El uso de valores separados por comas y sin paréntesis para crear una tupla es una truco que no funciona en todas partes. Las listas por comprensión es un buen ejemplo:

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

Tienes que hacer esto:

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

Lista desembalaje funciona bien, sin embargo, por lo que es un poco variable, donde se permiten valores acotados, separados por comas:

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

en func(bunch_of_args) se le permite seguir la última arg con una coma, al igual que en

alist = [1, 2, 3, ] 
Cuestiones relacionadas