Precisa entender Python objeto de gerador
-
12-12-2019 - |
Pergunta
No exemplo a seguir:
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'
Eu entendo que o que está dentro de qualquer(...) é um gerador de objeto.O que eu não entendo é a falta de parênteses - se os parênteses pertencem a qualquer função (), não deve haver outro conjunto de parênteses em torno do gerador de expressão?
Obrigado.
Solução
Os parênteses podem ser omitidos quando usado em chamadas de função com apenas um argumento, o gerador de sintaxe de expressão permita especificamente para ele.
Os parênteses podem ser omitidos em chamadas com apenas um argumento.Consulte a secção Chamadas para os detalhes.
Outras dicas
Você pode deixar de fora dos parênteses de um gerador de expressão se a expressão é a única coisa entre parênteses já.
Do documentação:
Os parênteses podem ser omitidos em chamadas com apenas um argumento.
Não, o extra parens não são necessários, nem são, na realidade, parens sempre necessário para a "expressão Booleana" você está testando, veja esses dois exemplos 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
O que você tem é uma função de chamada com um único argumento (o gerador de expressão), então não parens são necessários.Ver o gerador de expressões docs para obter mais informações.
Para chamadas de função com apenas um argumento (de que gerador de expressão), eles não são necessários de acordo com a docs
Os parênteses podem ser omitidos em chamadas com apenas um argumento.Consulte a secção Chamadas para o detalhe.