2012-07-26 14 views
5

En el siguiente:necesidad de entender Python generador objeto

name = 'TODD' 
chars = set('AEIOU') 
for ii in range(-1, int(math.copysign(len(name) + 1, -1)), -1): 
    if any((cc in chars) for cc in name[ii]): 
     print 'Found' 
    else: 
     print 'Not Found' 

entiendo que lo que hay dentro de cualquier (...) es un objeto generador. Lo que no entiendo es la falta de paréntesis: si los paréntesis pertenecen a la función any(), ¿no debería haber otro conjunto de paréntesis alrededor de la expresión del generador?

Gracias.

Respuesta

12

El paréntesis se puede omitir cuando se usa en llamadas a funciones con un solo argumento, el generator expression syntax lo permite específicamente.

Los paréntesis se pueden omitir en llamadas con un solo argumento. Vea la sección Calls para los detalles.

+2

No creo que hayas pegado el enlace que pretendías. – interjay

+0

@interjay: buena captura, falla de c & p. ¿Alguien más disfruta de listas fijas de conciertos de festivales noruegos? :-P corregido. –

+0

Gracias, y gracias a todos los que respondieron. – Sabuncu

2

Puede omitir el paréntesis de una expresión generadora si la expresión ya es lo único entre paréntesis.

Desde el documentation:

Los paréntesis pueden omitirse en llamadas con sólo un argumento.

2

No, no son necesarios los parens adicionales, ni, de hecho, son parens siempre es necesario para la "expresión booleana" que se está probando, ver a estos dos ejemplos simples:

In [37]: any(i > 10 for i in range(19)) 
Out[37]: True 

In [38]: all(i > 10 for i in range(19)) 
Out[38]: False 

lo que tienes es una Llamada de función con un único argumento (la expresión de tu generador) por lo que no se requieren paréntesis. Consulte el generator expressions docs para obtener más información.

+0

realmente no responde la pregunta. –

+1

@KarolyHorvath ¿Mejor? – Levon

1

Para la función de llamadas con un solo argumento (que la expresión del generador), que no están obligados por la docs

Los paréntesis pueden omitirse en llamadas con sólo un argumento. Ver la sección Llamadas para el detalle.

Cuestiones relacionadas