|
24 | 24 | "\n", |
25 | 25 | "- Immaginiamo di avere una lista della spesa. E' opportuno avere una struttura in cui l'ordine è importante e si possono aggiungere/togliere elementi. In Python, per questo tipo di stritture si usa una **lista**.\n", |
26 | 26 | "- Immaginiamo di voler memorizzare le coordinate fisse di un punto. Quello che serve è una struttura i cui elementi non possono essere modificati. In Python, si usa una una **tupla**.\n", |
27 | | - "- Immaginiamo di voler salvare i contatti di una rubrica? Serve una struttura che associ un nome a un numero di telefono. In Python, si usa un **dizionario**.\n", |
| 27 | + "- Immaginiamo di voler salvare i contatti di una rubrica. Serve una struttura che associ un nome a un numero di telefono. In Python, si usa un **dizionario**.\n", |
28 | 28 | "\n", |
29 | 29 | "Nelle prossime sezioni, vedremo le caratteristiche di ogni struttura dati e i loro principali utilizzi." |
30 | 30 | ] |
|
344 | 344 | "- 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", |
345 | 345 | "\n", |
346 | 346 | "### Come funziona il ciclo `for`?\n", |
347 | | - "Quando scrivi un ciclo `for`, Python usa gli iteratori dietro le quinte. Ad esempio, `for elemento in lista:` esegue questi passaggi:\n", |
| 347 | + "Quando si scrive un ciclo `for`, Python usa gli iteratori dietro le quinte. Ad esempio, `for elemento in lista:` esegue questi passaggi:\n", |
348 | 348 | "\n", |
349 | 349 | "1. Chiama la funzione `iter()` sulla `lista` per ottenere un **iteratore**.\n", |
350 | 350 | "2. Ripete la chiamata alla funzione `next()` sull'iteratore per ottenere l'elemento successivo.\n", |
|
370 | 370 | "# it creates an iterator with iter(fruits) and calls next() until StopIteration" |
371 | 371 | ] |
372 | 372 | }, |
373 | | - { |
374 | | - "cell_type": "markdown", |
375 | | - "metadata": {}, |
376 | | - "source": [ |
377 | | - "---" |
378 | | - ] |
379 | | - }, |
380 | 373 | { |
381 | 374 | "cell_type": "markdown", |
382 | 375 | "metadata": {}, |
|
484 | 477 | "Invece di scrivere diversi cicli `for` o usare funzioni come `map()` e `filter()`, possiamo combinare logica, iterazione e condizione in un'unica espressione chiara.\n", |
485 | 478 | "\n", |
486 | 479 | "---\n", |
487 | | -"### 🔹 List Comprehension\n", |
| 480 | +"### List Comprehension\n", |
488 | 481 | "Le *list comprehensions* sono la forma più comune. Consentono di generare una lista a partire da un iterabile.\n", |
489 | 482 | "\n", |
490 | 483 | "**Esempio base:**\n", |
|
512 | 505 | "```\n", |
513 | 506 | "\n", |
514 | 507 | "---\n", |
515 | | -"### 🔹 Dict Comprehension\n", |
| 508 | +"### Dict Comprehension\n", |
516 | 509 | "Permettono di costruire un **dizionario** in un’unica riga.\n", |
517 | 510 | "\n", |
518 | 511 | "```python\n", |
|
531 | 524 | "```\n", |
532 | 525 | "\n", |
533 | 526 | "---\n", |
534 | | -"### 🔹 Set Comprehension\n", |
| 527 | +"### Set Comprehension\n", |
535 | 528 | "Gli *insiemi* (set) in Python non ammettono duplicati. Con una *set comprehension* possiamo creare facilmente collezioni di elementi unici.\n", |
536 | 529 | "\n", |
537 | 530 | "```python\n", |
|
544 | 537 | "Un vantaggio importante è che, anche se un valore appare più volte nel ciclo, l’insieme lo terrà una sola volta.\n", |
545 | 538 | "\n", |
546 | 539 | "---\n", |
547 | | -"### 🔹 Generator Expression ⚙️\n", |
| 540 | +"### Generator Expression\n", |
548 | 541 | "Le *generator expressions* sono molto simili alle list comprehensions, ma invece di creare l’intera lista in memoria, producono i valori **uno alla volta**, quando servono. Questo le rende ideali per lavorare con grandi quantità di dati o flussi infiniti.\n", |
549 | 542 | "\n", |
550 | 543 | "```python\n", |
|
563 | 556 | "```\n", |
564 | 557 | "\n", |
565 | 558 | "---\n", |
566 | | -"### 🧠 Quando usare cosa\n", |
567 | | -"- Usa **list comprehensions** quando ti serve effettivamente una lista in memoria.\n", |
568 | | -"- Usa **dict** o **set comprehensions** per creare collezioni chiave-valore o insiemi unici.\n", |
569 | | -"- Usa **generator expressions** per flussi di dati o quando vuoi risparmiare memoria.\n", |
| 559 | +"### Quando usare cosa\n", |
| 560 | +"- Usare **list comprehensions** quando serve effettivamente una lista in memoria.\n", |
| 561 | +"- Usare **dict** o **set comprehensions** per creare collezioni chiave-valore o insiemi unici.\n", |
| 562 | +"- Usare **generator expressions** per flussi di dati o quando si vuole risparmiare memoria.\n", |
570 | 563 | "\n", |
571 | 564 | "Le comprehensions non sono solo sintatticamente più belle, ma spesso più veloci dei cicli tradizionali, grazie all’implementazione interna ottimizzata di Python.\n", |
572 | 565 | "\n", |
573 | 566 | "---\n", |
574 | | -"📘 **Curiosità storica:** Le comprehensions derivano direttamente dal linguaggio **Haskell** e, in parte, da **Set-builder notation** della matematica. Python le ha introdotte nella versione 2.0 (anno 2000), e da allora sono diventate uno standard nella scrittura di codice Pythonic.\n" |
| 567 | +"**Curiosità storica:** Le comprehensions derivano direttamente dal linguaggio **Haskell** e, in parte, da **Set-builder notation** della matematica. Python le ha introdotte nella versione 2.0 (anno 2000), e da allora sono diventate uno standard nella scrittura di codice Pythonic.\n" |
575 | 568 | ] |
576 | 569 | }, |
577 | 570 | { |
|
0 commit comments