[Python] Domanda da super niubbo sui generatori.
Davide Brunato
brunato a sissa.it
Mer 10 Mar 2021 10:17:57 CET
On 3/10/21 9:03 AM, Gabriele Battaglia wrote:
> Buondì.
> Sono nuovissimo nell'uso dei generatori, non li ho mai studiati ne usati
> prima.
> Ora devo colmare questa laguna d'ignoranza, la "g" non è un refuso! :)
> Vi chiedo 2 sciocchezze, per favore rispondete col metodo AIAF: As I am
> Five... si scriverà così? :)
>
> Dunque, ho questo generatore qui:
>
> import os
> filesys = os.walk(os.getcwd())
>
> So che posso fare una cosa del tipo:
>
> for root, folders, files in filesys:
> print(f"Root is {root}")
> ...eccetera eccetera.
>
> Ma se volessi sapere solo la root e basta, come la tirerei fuori dal
> generatore?
> O, in altre parole, esiste solo il ciclo for, che mi permette diciamo di
> guardarci dentro?
>
> Grazie.
> Gabry.
>
Ciao,
un generatore è a tutti gli effetti un oggetto iteratore pronto all'uso,
non serve necessariamente il for per gestire la sequenza di valori
generata, ma basta applicare la funzione next().
Nel tuo esempio potrebbe essere:
try:
root, folders, files = next(filesys)
except StopIteration:
pass # o interrompi i ciclo se se in un while ...
else:
... # usi i 3 valori ottenuti
oppure puoi applicare un default appropriato quando chiami next():
root, folders, files = next(filesys, ('', [], []))
if root != '':
... # usi i 3 valori ottenuti
Maggiori informazioni sulla lista
Python