Cos'è iterabile?

Ecco una spiegazione di cosa significa "iterabile" in programmazione, presentata in formato Markdown:

Un iterabile è un oggetto in Python (e in molti altri linguaggi di programmazione) che può essere iterato, ovvero i cui elementi possono essere attraversati uno ad uno. In altre parole, è un oggetto che puoi usare in un ciclo for.

Cosa rende un oggetto iterabile?

Un oggetto è considerato iterabile se definisce il metodo __iter__(), che restituisce un iteratore o se definisce il metodo __getitem__() con argomenti di indice che iniziano da 0 (e solleva IndexError quando gli indici non sono più validi).

Esempi comuni di iterabili:

  • Liste: [1, 2, 3] (<a href="https://it.wikiwhat.page/kavramlar/Liste">List</a>)
  • Tuple: (1, 2, 3) (<a href="https://it.wikiwhat.page/kavramlar/Tuple">Tuple</a>)
  • Stringhe: "ciao" (<a href="https://it.wikiwhat.page/kavramlar/Stringhe">Stringhe</a>)
  • Dizionari: {"a": 1, "b": 2} (itera sulle chiavi) (<a href="https://it.wikiwhat.page/kavramlar/Dizionari">Dizionari</a>)
  • Set: {1, 2, 3} (<a href="https://it.wikiwhat.page/kavramlar/Set">Set</a>)
  • File: un oggetto file aperto (itera sulle righe)

Iteratori:

Un iteratore è un oggetto che produce i valori dell'iterabile uno alla volta. Implementa il metodo __next__(), che restituisce l'elemento successivo nella sequenza. Quando non ci sono più elementi, __next__() solleva un'eccezione StopIteration. La funzione iter() viene utilizzata per ottenere un iteratore da un iterabile. La funzione next() viene utilizzata per ottenere l'elemento successivo dall'iteratore.

Esempio:

my_list = [1, 2, 3]
my_iterator = iter(my_list)

print(next(my_iterator)) # Output: 1
print(next(my_iterator)) # Output: 2
print(next(my_iterator)) # Output: 3

# next(my_iterator)  # Questo solleverebbe StopIteration

Perché gli iterabili sono importanti?

  • Efficienza: Gli iterabili, specialmente con l'uso di <a href="https://it.wikiwhat.page/kavramlar/Generatori">generatori</a>, permettono di elaborare dati grandi senza doverli caricare completamente in memoria. Questo è cruciale per lavorare con file di grandi dimensioni o flussi di dati.
  • Semplicità: Rendono il codice più leggibile e manutenibile, soprattutto quando si tratta di elaborare collezioni di dati.
  • Astrazione: Forniscono un'interfaccia uniforme per iterare su diversi tipi di dati.