[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