Skip to content

Commit 2a0642f

Browse files
committed
version 1.7 part 2
1 parent db03750 commit 2a0642f

File tree

1 file changed

+42
-4
lines changed

1 file changed

+42
-4
lines changed

03_strutture_dati.ipynb

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@
348348
"\n",
349349
"In Python, la maggior parte delle strutture dati, come liste, tuple e dizionari, sono **oggetti iterabili**. Un oggetto `iterable` è un contenitore che, quando gli viene richiesto, può produrre un **iteratore**.\n",
350350
"\n",
351-
"- Un **Iterable** è un oggetto che consente di essere itereato (es. una lista).\n",
352-
"- Un **Iteratore** è un oggetto che tiene traccia della posizione corrente mentre percorre l'oggetto iterable, e sa come passare all'elemento successivo.\n",
351+
"- Un **Iterable** è un oggetto che implementa il metodo speciale `__iter__()`, che restituisce un **Iteratore**.\n",
352+
"- Un **Iteratore** è un oggetto che implementa il metodo `__next__()` e che tiene traccia della posizione corrente mentre percorre l'oggetto iterable. Quando non ci sono più elementi, solleva l'eccezione `StopIteration`.\n",
353353
"\n",
354354
"### Come funziona il ciclo `for`?\n",
355355
"Quando scrivi un ciclo `for`, Python usa gli iteratori dietro le quinte. Ad esempio, `for elemento in lista:` esegue questi passaggi:\n",
@@ -385,11 +385,49 @@
385385
"---"
386386
]
387387
},
388+
{
389+
"cell_type": "markdown",
390+
"metadata": {},
391+
"source": [
392+
"---\n",
393+
"## 6. La parola chiave `yield` 🔄\n",
394+
"\n",
395+
"In Python, la parola chiave **`yield`** viene usata all’interno di una funzione per trasformarla in un **generatore**. \n",
396+
"Un generatore è una funzione speciale che produce una sequenza di valori uno alla volta, **senza calcolare tutti i risultati in anticipo**. \n",
397+
"\n",
398+
"- Ogni volta che la funzione incontra `yield`, restituisce un valore al chiamante e **sospende** la sua esecuzione. \n",
399+
"- Alla chiamata successiva, l’esecuzione riprende **dal punto esatto in cui era stata sospesa**, mantenendo lo stato interno (variabili locali). \n",
400+
"- Questo comportamento lo rende molto utile per lavorare con **grandi quantità di dati** o flussi infiniti, perché evita di occupare memoria creando subito liste complete.\n",
401+
"\n",
402+
"**Esempio:**\n",
403+
"```python\n",
404+
"def count_up_to(n):\n",
405+
" count = 1\n",
406+
" while count <= n:\n",
407+
" yield count # return the current number\n",
408+
" count += 1\n",
409+
"\n",
410+
"for num in count_up_to(5):\n",
411+
" print(num)\n",
412+
"```\n",
413+
"\n",
414+
"Output:\n",
415+
"```\n",
416+
"1\n",
417+
"2\n",
418+
"3\n",
419+
"4\n",
420+
"5\n",
421+
"```\n",
422+
"\n",
423+
"In questo esempio, `count_up_to` non restituisce una lista, ma un **oggetto generatore**, che produce i numeri solo quando richiesti."
424+
]
425+
},
388426
{
389427
"cell_type": "markdown",
390428
"metadata": {},
391429
"source": [
392-
"## 6. Spacchettare le collezioni: gli operatori `*` e `**`\n",
430+
"## 7. Spacchettare le collezioni: gli operatori `*` e `**`\n",
393431
"\n",
394432
"In Python, i caratteri `*` e `**` sono molto utili quando si lavora con le funzioni, specialmente per **spacchettare** (unpacking) il contenuto di collezioni come liste e dizionari, trasformandoli in argomenti singoli.\n",
395433
"\n",
@@ -448,7 +486,7 @@
448486
"metadata": {},
449487
"source": [
450488
"---\n",
451-
"## 7 Comprehensions ed Espressioni Generatrici \ud83c\udf1f\n",
489+
"## 8. Comprehensions ed Espressioni Generatrici \ud83c\udf1f\n",
452490
"\n",
453491
"Le *comprehensions* sono una sintassi compatta e leggibile per creare nuove collezioni a partire da iterabili esistenti. Sono molto usate in Python per scrivere codice conciso e veloce.\n",
454492
"\n",

0 commit comments

Comments
 (0)