Domanda

Di seguito:

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'
.

Capisco che ciò che c'è dentro qualsiasi (...) è un oggetto generatore.Quello che non capisco è la mancanza di parentesi - se le parentesi appartengono a qualsiasi funzione (), non dovrebbe esserci un altro set di parentesi attorno all'espressione del generatore?

Grazie.

È stato utile?

Soluzione

La parentesi può essere omessa se utilizzata nelle chiamate di funzione con un solo argomento, La sintassi dell'espressione del generatore lo consente specificamente.

.

Le parentesi possono essere omesse su chiamate con un solo argomento.Vedere la sezione chiama per il dettaglio.

Altri suggerimenti

È possibile lasciare le parentesi di un'espressione del generatore se l'espressione è già l'unica cosa tra parentesi.

Dal Documentazione :

.

Le parentesi possono essere omesse su chiamate con un solo argomento.

No, non sono necessari la parente supplementare, né in effetti sono presenti parenti sempre necessarie per l'espressione "booleana" che stai testando, vedere questi due semplici esempi:

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
.

Quello che hai è una chiamata funzione con un singolo argomento (l'espressione del generatore) quindi non sono richieste alcun paras.Vedi il Generator Expressions Docs per ulteriori informazioni.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top