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.
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python