[Python] Domanda da super niubbo sui generatori.

Yuri yurj a alfa.it
Mer 10 Mar 2021 10:13:55 CET


Ecco il codice che può essere più esemplificativo della mail precedente:

Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> import os
 >>> filesys = os.walk(os.getcwd())
 >>> list(filesys)
[('/tmp/test', ['a'], ['b.txt']), ('/tmp/test/a', [], [])]
 >>> a = list(filesys) <- filesys è stato già consumato, quindi non 
tornerà più nulla.
 >>> print(a)
[]
 >>> filesys = os.walk(os.getcwd())
 >>> a = list(filesys)
 >>> a
[('/tmp/test', ['a'], ['b.txt']), ('/tmp/test/a', [], [])]
 >>>

quindi os.walk crea un generatore, e quindi è una funzione di tipo 
generatore. Mentre il risultato della chiamata è un iteratore, cioè una 
cosa su cui puoi fare next e compagnia. Una funzione che utilizzi yeld è 
un generatore, ad esempio.

Ricapitolando:

- ogni volta che chiami il generatore os.walk crei un iteratore

Il 10/03/21 09:03, Gabriele Battaglia ha scritto:
> 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.
>


Maggiori informazioni sulla lista Python