2011-01-25 13 views
6

sólo estaba experimentando en Python con una sintaxis diferente para pasar de un generador como un argumento a una función, y me di cuenta de que a pesar de que he estado haciendo esto,¿Por qué se puede omitir el paréntesis que rodea a los generadores en Python al pasarlo a una función?

>>> sum((j for j in xrange(5))) 
10 

esto funciona así:

>>> sum(j for j in xrange(5)) 
10 

Esto se prueba en Python 2.6.6 en Linux. ¿Qué está pasando debajo del capó? ¿Es solo azúcar sintáctico? Después de todo, por lo general un generador de envolver es indescifrable para el intérprete:

>>> j for j in xrange(5) 
    File "<stdin>", line 1 
    j for j in xrange(5) 
     ^
SyntaxError: invalid syntax 
+0

Me di cuenta de esto también, y en realidad me irrita. No me gustan las irregularidades gramaticales como esta, incluso si son un buen azúcar sintáctico. Si quisiera una gramática extraña, estaría programando en Perl. – Omnifarious

+0

@Omnifarius: Valoro altamente la consistencia (y también lo hace Python en general), pero los parens dobles son simplemente redundantes. – delnan

+0

@delnan - No lo son. Por ejemplo: 'sum (j para j, k en {'a': 1, 'b': 2} .iteritems())'. ¿Cómo se interpreta la coma entre 'j' y' k', y por qué? – Omnifarious

Respuesta

5

estoy seguro de leer el python grammar va a responder a esa pregunta.

Si prefiere el inglés simple sobre gramáticas: PEP-289 lo explica.

+7

La gramática de Python, aunque no es tan mala como Perl, no es para los débiles de corazón. La respuesta más corta es "sí, azúcar sintáctico". – delnan

+8

Perl tiene una gramática? –

+0

La gramática le dirá * que * usted puede; no te dirá * por qué * está diseñado de esa manera. –

Cuestiones relacionadas