Pregunta

en lo siguiente:

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 (...) es un objeto generador.Lo que no entiendo es la falta de paréntesis: si los paréntesis pertenecen a la función (), ¿no debería haber otro conjunto de paréntesis alrededor de la expresión del generador?

gracias.

¿Fue útil?

Solución

El paréntesis se puede omitir cuando se usa en las llamadas de función con un solo argumento, la La sintaxis de expresión del generador lo permite específicamente.

Los paréntesis se pueden omitir en llamadas con un solo argumento.Consulte la sección Llamadas para el detalle.

Otros consejos

Puede dejar de lado los paréntesis de una expresión del generador si la expresión es la única cosa entre paréntesis ya.

de la Documentación :

Los paréntesis se pueden omitir en las llamadas con un solo argumento.

No, los parens adicionales no son necesarios, ni, de hecho, son parens siempre necesarios para la "expresión booleana" que está probando, consulte 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 tiene es una llamada de función con un solo argumento (su expresión del generador) por lo que no se requieren parens.Consulte la Generator Expressions Docs para más información.

For function calls with just one argument (that generator expression), they aren't required per the docs

The parentheses can be omitted on calls with only one argument. See section Calls for the detail.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top