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

Rispondere a