Bisogno di capire l'oggetto del generatore di Python
-
12-12-2019 - |
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.
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.