Necesidad de entender el objeto Generador de Python
-
12-12-2019 - |
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.
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.