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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top