Commits

gpiancastelli  committed 864cc0f

The initial drop caps in each chapter are in alphabetical order from A to Z (excluding J, K, W, X, Y).

  • Participants
  • Parent commits 657d4da

Comments (0)

Files changed (21)

File caso-di-studio-convertire-chardet-verso-python-3.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Una codifica di caratteri scorretta o sconosciuta è la causa n°1 della presenza di testo inintelleggibile sul web, nella vostra casella di posta e in effetti attraverso ogni sistema computerizzato mai realizzato. Nel <a href=stringhe.html>Capitolo 3</a> ho parlato della storia delle codifiche di carattere e della creazione di Unicode, &#8220;una codifica per dominarle tutte&#8221;. Mi piacerebbe non dover mai più vedere un carattere incomprensibile su una pagina web, perché tutti i sistemi d&#8217;autore memorizzerebbero informazioni di codifica accurate, tutti i protocolli di trasferimento conoscerebbero Unicode e ogni sistema che gestisce testo manterrebbe una fedeltà perfetta nella conversione tra diverse codifiche.
+<p class=f>Si deve principalmente a una codifica di caratteri scorretta o sconosciuta la presenza di testo inintelleggibile sul web, nella vostra casella di posta e in effetti attraverso ogni sistema computerizzato mai realizzato. Nel <a href=stringhe.html>Capitolo 3</a> ho parlato della storia delle codifiche di carattere e della creazione di Unicode, &#8220;una codifica per dominarle tutte&#8221;. Mi piacerebbe non dover mai più vedere un carattere incomprensibile su una pagina web, perché tutti i sistemi d&#8217;autore memorizzerebbero informazioni di codifica accurate, tutti i protocolli di trasferimento conoscerebbero Unicode e ogni sistema che gestisce testo manterrebbe una fedeltà perfetta nella conversione tra diverse codifiche.
 <p>Mi piacerebbe anche avere un pony.
 <p>Un pony Unicode.
 <p>Uno Unipony, per così dire.

File convertire-codice-verso-python-3-con-2to3.html

 
 <h2 id=divingin>Immersione!</h2>
 
-<p class=f>Di fatto, tutti i programmi scritti in Python 2 avranno bisogno almeno di qualche ritocco per poter funzionare correttamente sotto Python 3. Per facilitare questa transizione, Python 3 include uno script di utilità chiamato <code>2to3</code>, che prende in ingresso il vostro codice sorgente in Python 2 e lo converte automaticamente verso Python 3 tanto quanto gli è possibile. Il <a href=caso-di-studio-convertire-chardet-verso-python-3.html#running2to3>Caso di studio: convertire <code>chardet</code> verso Python 3</a> descrive come eseguire <code>2to3</code>, poi mostra alcune cose che lo script non riesce a correggere automaticamente. Questa appendice illustra ciò che lo script <em>riesce</em> a correggere automaticamente
+<p class=f>Una quantità talmente grande di caratteristiche del linguaggio è cambiata tra Python 2 e Python 3 che solo un numero molto ridotto e sempre più esiguo di programmi verrà eseguito senza modifiche da entrambi gli interpreti. Per facilitare questa transizione, Python 3 include uno script di utilità chiamato <code>2to3</code>, che prende in ingresso il vostro codice sorgente in Python 2 e lo converte automaticamente verso Python 3 tanto quanto gli è possibile. Il <a href=caso-di-studio-convertire-chardet-verso-python-3.html#running2to3>Caso di studio: convertire <code>chardet</code> verso Python 3</a> descrive come eseguire <code>2to3</code>, poi mostra alcune cose che lo script non riesce a correggere automaticamente. Questa appendice illustra ciò che lo script <em>riesce</em> a correggere automaticamente
 
 <h2 id=print>L&#8217;istruzione <code>print</code></h2>
 

File descrizioni.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Questo capitolo vi insegnerà le descrizioni di lista, le descrizioni di dizionario e le descrizioni di insieme: tre concetti correlati basati su un&#8217;unica tecnica molto potente. Ma prima vorrei fare una breve digressione per parlarvi di due moduli che vi aiuteranno a navigare nel vostro file system locale.
+<p class=f>Esaminando i linguaggi di programmazione, si nota che ognuno possiede una particolare funzionalità che, pur essendo complessa per natura, è stata resa intenzionalmente semplice. Quando state imparando un nuovo linguaggio potreste non riuscire a riconoscerla, perché i linguaggi che conoscete non la rendono altrettanto semplice, occupati come sono a semplificare qualche altra funzione. Questo capitolo vi insegnerà le descrizioni di lista, le descrizioni di dizionario e le descrizioni di insieme: tre concetti correlati basati su un&#8217;unica tecnica molto potente. Ma prima vorrei fare una breve digressione per parlarvi di due moduli che vi aiuteranno a navigare nel vostro file system locale.
 
 <p class=a>&#x2042;
 

File distribuire-librerie-python.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>E quindi volete rilasciare un programma, una libreria, un framework, un&#8217;applicazione scritta in Python. Eccellente. Il mondo ha bisogno di più codice Python.
-
-<p>Python 3 include un framework di distribuzione chiamato Distutils. Distutils è molte cose: uno strumento di assemblaggio (per voi), uno strumento di installazione (per i vostri utenti), un formato di metadati per pacchetti software (per i motori di ricerca) e anche di più. Si integra con il <a href=http://pypi.python.org/>Python Package Index</a> (&#8220;PyPI&#8221;, Indice dei Pacchetti Python), un archivio centrale per librerie Python open source.
+<p class=f>Tra l&#8217;artista e la sua consacrazione c&#8217;è di mezzo la consegna dell&#8217;opera finita, o almeno questo è quello che sostengono alcuni. Se volete rilasciare un programma, una libreria, un framework, un&#8217;applicazione scritta in Python, potete utilizzare il framework di distribuzione Distutils incluso in Python 3. Distutils è molte cose: uno strumento di assemblaggio (per voi), uno strumento di installazione (per i vostri utenti), un formato di metadati per pacchetti software (per i motori di ricerca) e anche di più. Si integra con il <a href=http://pypi.python.org/>Python Package Index</a> (&#8220;PyPI&#8221;, Indice dei Pacchetti Python), un archivio centrale per librerie Python open source.
 
 <p>Tutte queste caratteristiche di Distutils si basano su un <i>programma di installazione</i> tradizionalmente chiamato <code>setup.py</code>. In effetti, avete già visto diversi programmi di installazione di Distutils in questo libro. Avete usato Distutils per installare <code>httplib2</code> nel capitolo <a href=servizi-web-http.html#introducing-httplib2>Servizi web HTTP</a> e ancora per installare <code>chardet</code> nel capitolo <a href=caso-di-studio-convertire-chardet-verso-python-3.html>Caso di studio: convertire <code>chardet</code> verso Python 3</a>.
 

File dove-proseguire-da-qui.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=things-to-read>Cose da leggere</h2>
-<p class=f>Ci sono diversi argomenti che ho deciso di non trattare in questo libro, ma per i quali esistono guide liberamente disponibili in rete. (Tutte le risorse sono in lingua inglese.)
+<p class=f>Zac, questo libro deve terminare da qualche parte, e sfortunatamente non mi è possibile trattare tutti gli aspetti di Python 3. Per fortuna, esistono molte guide valide liberamente disponibili in rete. (Tutte le risorse elencate sono in lingua inglese.)
 
 <p>Decoratori:
 

File espressioni-regolari.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Ogni moderno linguaggio di programmazione include funzioni built-in per lavorare con le stringhe. In Python, le stringhe sono dotate di metodi per effettuare ricerche e sostituzioni: <code>index()</code>, <code>find()</code>, <code>split()</code>, <code>count()</code>, <code>replace()</code>, <i class=baa>&amp;</i>c. Ma questi metodi si limitano a gestire i casi più semplici. Per esempio, il metodo <code>index()</code> cerca una singola sottostringa costante, e la ricerca è sempre sensibile alle maiuscole. Per fare ricerche insensibili alle maiuscole di una stringa <var>s</var>, dovete chiamare <code>s.lower()</code> oppure <code>s.upper()</code> e assicurarvi che le vostre stringhe di ricerca contengano i caratteri appropriati per corrispondere. I metodi <code>replace()</code> e <code>split()</code> hanno le stesse limitazioni.
+<p class=f>Generalmente, estrarre una specifica porzione da un testo molto lungo non è un&#8217;impresa facile. In Python le stringhe sono dotate di metodi per effettuare ricerche e sostituzioni: <code>index()</code>, <code>find()</code>, <code>split()</code>, <code>count()</code>, <code>replace()</code>, <i class=baa>&amp;</i>c. Ma questi metodi si limitano a gestire i casi più semplici. Per esempio, il metodo <code>index()</code> cerca una singola sottostringa costante, e la ricerca è sempre sensibile alle maiuscole. Per fare ricerche insensibili alle maiuscole di una stringa <var>s</var>, dovete chiamare <code>s.lower()</code> oppure <code>s.upper()</code> e assicurarvi che le vostre stringhe di ricerca contengano i caratteri appropriati per corrispondere. I metodi <code>replace()</code> e <code>split()</code> hanno le stesse limitazioni.
 <p>Se il vostro obiettivo può essere raggiunto con i metodi delle stringhe, dovreste usarli. Sono veloci, semplici e facili da leggere, e c&#8217;è molto da dire a favore del codice veloce, semplice e leggibile. Ma se state lavorando con le stringhe e utilizzate una grande quantità di funzioni differenti insieme a una serie di istruzioni <code>if</code> per gestire casi particolari, o se state combinando tra loro chiamate a <code>split()</code> e <code>join()</code> per affettare e ricomporre le vostre stringhe, potreste aver bisogno di avvalervi delle espressioni regolari.
 <p>Le espressioni regolari sono un modo potente e (per la maggior parte) standard per cercare, sostituire e riconoscere testo tramite complessi pattern di caratteri. Sebbene la sintassi delle espressioni regolari sia ermetica e diversa dal normale codice, il risultato potrebbe rivelarsi <em>più</em> leggibile di una soluzione manuale che usa una lunga catena di metodi delle stringhe. Le espressioni regolari vi permettono anche di inserire commenti al loro interno, in modo che possiate documentare le singole parti che le compongono.
 <blockquote class='note compare perl5'>
 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Il mio portatile Windows aveva 38.493 file prima che installassi una sola applicazione. L&#8217;installazione di Python 3 ha aggiunto quasi 3.000 file a quel totale. I file sono il paradigma di memorizzazione principale di tutti i sistemi operativi più importanti; il concetto è talmente radicato che la maggior parte delle persone avrebbe difficoltà a <a href=http://en.wikipedia.org/wiki/Computer_file#History>immaginare un&#8217;alternativa</a>. Il vostro computer, metaforicamente parlando, annega nei file.
+<p class=f>Occasionalmente, il mio portatile Windows aveva 38.493 file prima che installassi una sola applicazione. L&#8217;installazione di Python 3 ha aggiunto quasi 3.000 file a quel totale. I file sono il paradigma di memorizzazione principale di tutti i sistemi operativi più importanti; il concetto è talmente radicato che la maggior parte delle persone avrebbe difficoltà a <a href=http://en.wikipedia.org/wiki/Computer_file#History>immaginare un&#8217;alternativa</a>. Il vostro computer, metaforicamente parlando, annega nei file.
 
 <h2 id=reading>Leggere dai file di testo</h2>
 

File generatori.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Per ragioni che vanno oltre ogni comprensione, sono sempre stato affascinato dai linguaggi. Non i linguaggi di programmazione. Be&rsquo; sì, i linguaggi di programmazione, ma anche i linguaggi naturali. Prendete l&#8217;inglese. L&#8217;inglese è una lingua schizofrenica che prende in prestito parole dal tedesco, francese, spagnolo e latino (per nominarne alcune). In realtà, &#8220;prende a prestito&#8221; è l&#8217;espressione sbagliata; &#8220;saccheggia&#8221; è più corretto. O forse &#8220;assimila&#8221;&nbsp;&mdash;&nbsp;come i Borg. Sì, mi piace.
+<p class=f>Ho sempre subito il fascino dei linguaggi, da degno figlio di un bibliotecario e di una laureata in letteratura inglese. Non parlo di linguaggi di programmazione. Be&#8217; sì, parlo di linguaggi di programmazione, ma anche di linguaggi naturali. Prendete l&#8217;inglese. L&#8217;inglese è una lingua schizofrenica che prende in prestito parole dal tedesco, francese, spagnolo e latino (per nominarne alcune). In realtà, &#8220;prende a prestito&#8221; è l&#8217;espressione sbagliata; &#8220;saccheggia&#8221; è più corretto. O forse &#8220;assimila&#8221;&nbsp;&mdash;&nbsp;come i Borg. Sì, mi piace.
 <p class=c><code>Noi siamo i Borg. Assimileremo le vostre peculiarità linguistiche ed etimologiche alle nostre. La resistenza è inutile.</code>
 <p>In questo capitolo, imparerete qualcosa sui sostantivi plurali in inglese. E anche sulle funzioni che restituiscono altre funzioni, sull&#8217;uso avanzato delle espressioni regolari e sui generatori. Ma prima, parliamo di come si costruiscono i sostantivi plurali in inglese. (Se non avete ancora letto <a href=espressioni-regolari.html>il capitolo sulle espressioni regolari</a>, questo potrebbe essere un buon momento per farlo. Questo capitolo presume che abbiate capito le basi delle espressioni regolari, e si addentrerà molto presto nelle loro tecniche più avanzate.)
 <p>Se siete cresciuti in un paese di lingua madre inglese o avete imparato l&#8217;inglese in un ambiente scolastico formale, avrete familiarità con le regole di base.

File il-vostro-primo-programma-python.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Di solito, i libri di programmazione cominciano con una serie di capitoli noiosi sui fondamentali, e solo verso la fine arrivano a costruire qualcosa di utile. Noi ci risparmieremo questa attesa. Qui di seguito troverete subito un programma Python completo e funzionante. Probabilmente ora non ha alcun senso per voi, ma non preoccupatevi perché lo analizzerete riga per riga. Provate comunque a leggerlo, prima di tutto, per vedere se riuscite a ricavarne qualcosa.
+<p class=f>Come accade per la maggior parte dei libri di programmazione, la convenzione imporrebbe di cominciare con una serie di capitoli noiosi sui fondamentali per poi arrivare gradualmente a costruire qualcosa di utile. Noi ci risparmieremo questa attesa. Qui di seguito troverete subito un programma Python completo e funzionante. Probabilmente ora non ha alcun senso per voi, ma non preoccupatevi perché lo analizzerete riga per riga. Provate comunque a leggerlo, prima di tutto, per vedere se riuscite a ricavarne qualcosa.
 <p class=d>[<a href=esempi/humansize.py>scarica <code>humansize.py</code></a>]
 <pre class=pp><code>SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
             1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}

File installare-python.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Benvenuti in Python 3. Immergiamoci. In questo capitolo, installerete la versione di Python 3 che vi serve.
+<p class=f>Benvenuti in Python 3. Immergiamoci. La prima cosa che dovrete fare con Python è installarlo. Oppure no?
 
 <h2 id=which>Quale Python vi serve?</h2>
 
-<p>La prima cosa che dovete fare con Python è installarlo. Oppure no?
-
 <p>Se state usando un account su un server remoto, il vostro <abbr>ISP</abbr> potrebbe avere già installato Python 3. Se state usando Linux a casa, anche in questo caso potreste già avere Python 3. La maggior parte delle distribuzioni GNU/Linux popolari includono Python 2 nella propria installazione predefinita; il numero di distribuzioni che includono anche Python 3 è limitato, ma in costante aumento. Mac OS X include una versione di Python 2 a riga di comando, ma al momento della scrittura non include Python 3. Microsoft Windows non include alcuna versione di Python. Ma non disperate! Potete aprirvi la strada verso l&#8217;installazione di Python a colpi di mouse, a prescindere da quale sistema operativo usate.
 
 <p>Il modo più facile di controllare se avete Python 3 sul vostro sistema Linux o Mac OS X è quello di ricorrere alla riga di comando. Su Linux, cercate un programma chiamato <b><code>Terminale</code></b> nel vostro menu <b><code>Applicazioni</code></b>. (Potrebbe trovarsi in un sottomenu come <b><code>Accessori</code></b> o <b><code>Strumenti di sistema</code></b>.) Su Mac OS X, c&#8217;è un&#8217;applicazione chiamata <b><code>Terminal.app</code></b> nella vostra cartella <code>/Application/Utilities/</code>.

File iteratori.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>In verità, i generatori sono solo un caso speciale di <i>iteratori</i>. Una funzione che produce valori tramite <code>yield</code> è un modo gradevole e compatto di costruire un iteratore senza costruire un iteratore. Lasciate che vi mostri cosa voglio dire.
+<p class=f>In verità, gli iteratori sono l&#8217;&#8220;ingrediente segreto&#8221; di Python 3: si trovano ovunque, nascosti dietro le quinte di ogni funzionalità, sempre appena fuori vista. Le <a href=descrizioni.html>descrizioni</a> sono solo un caso speciale di <i>iteratori</i>. Anche i generatori sono solo un caso speciale di <i>iteratori</i>: una funzione che produce valori tramite <code>yield</code> è un modo gradevole e compatto di costruire un iteratore senza costruire un iteratore. Lasciate che vi mostri cosa voglio dire.
 
 <p>Ricordate il <a href=generatori.html#a-fibonacci-generator>generatore di Fibonacci</a>? Qui di seguito lo trovate reimplementato da zero sotto forma di iteratore:
 

File nomi-dei-metodi-speciali.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Abbiamo già trattato alcuni metodi speciali in altri punti di questo libro&nbsp;&mdash;&nbsp;metodi &#8220;magici&#8221; che Python invoca quando usate una certa sintassi. Sfruttando i metodi speciali, le vostre classi possono assumere il comportamento di sequenze, dizionari, funzioni, iteratori, o addirittura numeri! Questa appendice serve sia come riferimento per i metodi speciali che abbiamo già visto, sia come breve introduzione ad alcuni dei metodi speciali più esoterici.
+<p class=f>Vi sono già stati presentati, nel corso di questo libro, alcuni metodi speciali&nbsp;&mdash;&nbsp;metodi &#8220;magici&#8221; che Python invoca quando usate una certa sintassi. Sfruttando i metodi speciali, le vostre classi possono assumere il comportamento di sequenze, dizionari, funzioni, iteratori, o addirittura numeri! Questa appendice serve sia come riferimento per i metodi speciali che abbiamo già visto, sia come breve introduzione ad alcuni dei metodi speciali più esoterici.
 
 <h2 id=basics>Le basi</h2>
 

File novità.html

 <p id=toc>&nbsp;
 <h2 id=divingin><i>alias</i> &#8220;il livello meno&#8221;</h2>
 
-<p class=f>Avete letto l&#8217;originale &#8220;<a href=http://it.diveintopython.org/>Immersione in Python</a>&#8221; e forse avete perfino comprato <a href=http://diveintopython.org>il libro in inglese</a>. (Grazie!) Conoscete già Python 2 piuttosto bene. Siete pronti a saltare il fosso e imparare Python 3. &hellip; Se tutto questo è vero, continuate a leggere. (Se niente di tutto questo è vero, vi converrebbe <a href=installare-python.html>cominciare dall&#8217;inizio</a>.)
+<p class=f>Avete già familiarità con la programmazione in Python? Avete letto l&#8217;originale &#8220;<a href=http://it.diveintopython.org/>Immersione in Python</a>&#8221; e magari avete perfino comprato <a href=http://diveintopython.org>il libro in inglese</a>? (Grazie!) Siete pronti a saltare il fosso e imparare Python 3? &hellip; Se tutto questo è vero, continuate a leggere. (Se niente di tutto questo è vero, vi converrebbe <a href=installare-python.html>cominciare dall&#8217;inizio</a>.)
 
 <p>Python 3 include uno script chiamato <code>2to3</code>. Imparate come funziona. Amatelo. Usatelo. <a href=convertire-codice-verso-python-3-con-2to3.html>Convertire codice verso Python 3 con <code>2to3</code></a> è una guida di riferimento a tutte le cose che lo strumento <code>2to3</code> è in grado di correggere automaticamente. Dato che molte di quelle correzioni sono modifiche alla sintassi, la guida è un buon punto di partenza per imparare molti dei cambiamenti sintattici di Python 3. (Ora <code>print</code> è una funzione, <code>`x`</code> non funziona, <i class=baa>&amp;</i>c.)
 

File refactoring.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Nonostante facciate del vostro meglio per scrivere test di unità completi, i bug capitano. Cosa intendo quando parlo di &#8220;bug&#8221;? Un bug è un test che non avete ancora scritto.
+<p class=f>Nonostante facciate del vostro meglio per scrivere <a href=test-di-unità.html>test di unità</a> completi, i bug capitano. Cosa intendo quando parlo di &#8220;bug&#8221;? Un bug è un test che non avete ancora scritto.
 
 <pre class=screen><samp class=p>>>> </samp><kbd class=pp>import roman7</kbd>
 <a><samp class=p>>>> </samp><kbd class=pp>roman7.from_roman('')</kbd> <span class=u>&#x2460;</span></a>

File serializzare-oggetti-python.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p>Il concetto di <dfn>serializzazione</dfn> è semplice. Avete in memoria una struttura dati che volete salvare, riutilizzare, o inviare a qualcun altro. Come fareste? Be&#8217;, questo dipende da come volete salvarla, dal modo in cui pensate di riutilizzarla e dal destinatario a cui desiderate inviarla. Molti videogiochi vi permettono di salvare i vostri progressi quando uscite dal gioco e di ricominciare da dove eravate rimasti quando rientrate nel gioco. (In realtà, anche molte applicazioni che non sono giochi lo fanno.) In questo caso, una struttura dati che cattura &#8220;i vostri progressi finora&#8221; deve essere memorizzata su disco quando uscite, poi caricata dal disco quando rientrate. I dati sono pensati solo per essere usati dallo stesso programma che li ha creati, mai per venire inviati in rete né per essere letti da altri programmi che non siano quello che li ha creati. Quindi, l&#8217;interoperabilità si limita a garantire che versioni più recenti del programma possano leggere i dati salvati dalle versioni precedenti.
+<p class=f>Quando lo analizzate in superficie, il concetto di <dfn>serializzazione</dfn> è semplice. Avete in memoria una struttura dati che volete salvare, riutilizzare, o inviare a qualcun altro. Come fareste? Be&#8217;, questo dipende da come volete salvarla, dal modo in cui pensate di riutilizzarla e dal destinatario a cui desiderate inviarla. Molti videogiochi vi permettono di salvare i vostri progressi quando uscite dal gioco e di ricominciare da dove eravate rimasti quando rientrate nel gioco. (In realtà, anche molte applicazioni che non sono giochi lo fanno.) In questo caso, una struttura dati che cattura &#8220;i vostri progressi finora&#8221; deve essere memorizzata su disco quando uscite, poi caricata dal disco quando rientrate. I dati sono pensati solo per essere usati dallo stesso programma che li ha creati, mai per venire inviati in rete né per essere letti da altri programmi che non siano quello che li ha creati. Quindi, l&#8217;interoperabilità si limita a garantire che versioni più recenti del programma possano leggere i dati salvati dalle versioni precedenti.
 
 <p>Per casi come questi, il modulo <code>pickle</code> è l&#8217;ideale: fa parte della libreria standard di Python, quindi è sempre disponibile; è veloce, perché la maggior parte del modulo è scritta in C, come lo stesso interprete Python; e può memorizzare strutture dati Python arbitrariamente complesse.
 

File servizi-web-http.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>I servizi web <abbr>HTTP</abbr> sono un modo programmatico di spedire e ricevere dati da server remoti utilizzando nient&#8217;altro che le operazioni di <abbr>HTTP</abbr>. Se volete ottenere dati dal server, usate <abbr>HTTP</abbr> <code>GET</code>; se volete inviare nuovi dati al server, usate <abbr>HTTP</abbr> <code>POST</code>. Alcune delle <abbr>API</abbr> più avanzate per i servizi web <abbr>HTTP</abbr> permettono anche di creare, modificare e cancellare dati utilizzando <abbr>HTTP</abbr> <code>PUT</code> e <abbr>HTTP</abbr> <code>DELETE</code>. In altre parole, i &#8220;verbi&#8221; definiti dal protocollo <abbr>HTTP</abbr> (<code>GET</code>, <code>POST</code>, <code>PUT</code> e <code>DELETE</code>) possono corrispondere direttamente a operazioni a livello di applicazione per recuperare, creare, modificare e cancellare dati.
+<p class=f>Relativamente alla descrizione della natura dei servizi web <abbr>HTTP</abbr>, non occorrono più di 15 parole: lo scambio di dati con server remoti utilizzando nient&#8217;altro che le operazioni di <abbr>HTTP</abbr>. Se volete ottenere dati dal server, usate <abbr>HTTP</abbr> <code>GET</code>; se volete inviare nuovi dati al server, usate <abbr>HTTP</abbr> <code>POST</code>. Alcune delle <abbr>API</abbr> più avanzate per i servizi web <abbr>HTTP</abbr> permettono anche di creare, modificare e cancellare dati utilizzando <abbr>HTTP</abbr> <code>PUT</code> e <abbr>HTTP</abbr> <code>DELETE</code>. In altre parole, i &#8220;verbi&#8221; definiti dal protocollo <abbr>HTTP</abbr> (<code>GET</code>, <code>POST</code>, <code>PUT</code> e <code>DELETE</code>) possono corrispondere direttamente a operazioni a livello di applicazione per recuperare, creare, modificare e cancellare dati.
 
 <p>Il vantaggio principale di questo approccio è la semplicità, e la sua semplicità si è dimostrata popolare. I dati&nbsp;&mdash;&nbsp;tipicamente in formato <a href=xml.html><abbr>XML</abbr></a> o <a href=serializzare-oggetti-python.html#json><abbr>JSON</abbr></a>&nbsp;&mdash;&nbsp;possono essere assemblati e memorizzati staticamente oppure generati dinamicamente da un programma lato server, e tutti i linguaggi di programmazione più importanti (compreso Python, naturalmente!) includono una libreria <abbr>HTTP</abbr> per scaricarli. Anche le attività di debug vengono facilitate: dato che ogni risorsa in un servizio web <abbr>HTTP</abbr> ha un indirizzo unico (sotto forma di <abbr>URL</abbr>), potete caricarla nel vostro browser web e vederne immediatamente i dati grezzi.
 

File stringhe.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=boring-stuff>Alcune cose noiose che avete bisogno di sapere prima di potervi immergere</h2>
-<p class=f>Sapevate che la popolazione di <a href=http://en.wikipedia.org/wiki/Bougainville_Province>Bougainville</a> ha il più piccolo alfabeto del mondo? Il loro <a href=http://en.wikipedia.org/wiki/Rotokas_alphabet>alfabeto Rotokas</a> è composto da sole 12 lettere: A, E, G, I, K, O, P, R, S, T, U e V. All&#8217;altra estremità dello spettro, lingue come il cinese, il giapponese e il coreano hanno migliaia di caratteri. L&#8217;inglese, ovviamente, ha 26 lettere&nbsp;&mdash;&nbsp;52 se contate le maiuscole e le minuscole separatamente&nbsp;&mdash;&nbsp;più una manciata di <i class=baa>!@#$%&amp;</i> simboli di punteggiatura.
+<p class=f>Forse pochi ne sono consapevoli, ma il testo è qualcosa di incredibilmente complicato. Considerate l&#8217;alfabeto, tanto per cominciare. La popolazione di <a href=http://en.wikipedia.org/wiki/Bougainville_Province>Bougainville</a> ha il più piccolo alfabeto del mondo; il loro <a href=http://en.wikipedia.org/wiki/Rotokas_alphabet>alfabeto Rotokas</a> è composto da sole 12 lettere: A, E, G, I, K, O, P, R, S, T, U e V. All&#8217;altra estremità dello spettro, lingue come il cinese, il giapponese e il coreano hanno migliaia di caratteri. L&#8217;inglese, ovviamente, ha 26 lettere&nbsp;&mdash;&nbsp;52 se contate le maiuscole e le minuscole separatamente&nbsp;&mdash;&nbsp;più una manciata di <i class=baa>!@#$%&amp;</i> simboli di punteggiatura.
 
-<p>Quando alcune persone parlano di &#8220;testo&#8221; stanno pensando a &#8220;caratteri e simboli su uno schermo di computer&#8221;. Ma i computer non si occupano di caratteri e simboli; i computer maneggiano bit e byte. Ogni frammento di testo che avete mai visto sullo schermo di un computer si trova in realtà memorizzato in una particolare <i>codifica di carattere</i>. Parlando per sommi capi, la codifica di carattere fornisce una corrispondenza tra quello che vedete sul vostro schermo e quello che il vostro computer mantiene effettivamente in memoria e su disco. Ci sono molte codifiche di carattere diverse, alcune ottimizzate per particolari lingue come il russo o il cinese o l&#8217;inglese, e altre che possono essere usate per più di una lingua.
+<p>Chi parla di &#8220;testo&#8221; probabilmente pensa a &#8220;caratteri e simboli su uno schermo di computer&#8221;. Ma i computer non si occupano di caratteri e simboli; i computer maneggiano bit e byte. Ogni frammento di testo che avete mai visto sullo schermo di un computer si trova in realtà memorizzato in una particolare <i>codifica di carattere</i>. Parlando per sommi capi, la codifica di carattere fornisce una corrispondenza tra quello che vedete sul vostro schermo e quello che il vostro computer mantiene effettivamente in memoria e su disco. Ci sono molte codifiche di carattere diverse, alcune ottimizzate per particolari lingue come il russo o il cinese o l&#8217;inglese, e altre che possono essere usate per più di una lingua.
 
-<p>In realtà le cose sono molto più complicate di così. Molti caratteri sono comuni a più di una codifica, ma ogni codifica può usare una diversa sequenza di byte per archiviare effettivamente quei caratteri in memoria o su disco. Quindi potete pensare alla codifica di carattere come a una sorta di chiave di decodifica. Ogni volta che qualcuno vi dà una sequenza di byte&nbsp;&mdash;&nbsp;un file, una pagina web, qualsiasi cosa&nbsp;&mdash;&nbsp;e afferma che si tratta di &#8220;testo&#8221;, avete bisogno di sapere quale codifica di carattere è stata usata in modo da poter decodificare i byte in caratteri. Se vi viene data la chiave sbagliata, o addirittura nessuna chiave, vi ritrovate con il non invidiabile compito di scoprire il codice da soli. Probabilmente sceglierete quello sbagliato, e il risultato non sarà intelleggibile.
+<p>In realtà le cose sono molto più complicate di così. Diverse codifiche hanno in comune molti caratteri, ma ogni codifica può usare una diversa sequenza di byte per archiviare effettivamente quei caratteri in memoria o su disco. Quindi potete pensare alla codifica di carattere come a una sorta di chiave di decodifica. Ogni volta che qualcuno vi dà una sequenza di byte&nbsp;&mdash;&nbsp;un file, una pagina web, qualsiasi cosa&nbsp;&mdash;&nbsp;e afferma che si tratta di &#8220;testo&#8221;, avete bisogno di sapere quale codifica di carattere è stata usata in modo da poter decodificare i byte in caratteri. Se vi viene data la chiave sbagliata, o addirittura nessuna chiave, vi ritrovate con il non invidiabile compito di scoprire il codice da soli. Probabilmente sceglierete quello sbagliato, e il risultato non sarà intelleggibile.
 
 <aside>Tutto quello che pensavate di sapere sulle stringhe è sbagliato.</aside>
 

File test-di-unità.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione! (Oppure no?)</h2>
-<p class=f>In questo capitolo scriverete e farete il debug di un insieme di funzioni di utilità per convertire numeri interi in numeri romani e viceversa. Avete visto le meccaniche per la costruzione e la validazione dei numeri romani nel <a href=espressioni-regolari.html#romannumerals>&#8220;Caso di studio: numeri romani&#8221;</a>. Ora fate un passo indietro e considerate come potremmo fare per trasformare quel programma in un&#8217;utilità a due vie.
+<p class=f>Mentre i ragazzini di oggi vengono rovinati da computer veloci e da stravaganti linguaggi &#8220;dinamici&#8221; che li inducono a scrivere codice come prima cosa, poi a consegnare il software, e solo dopo a effettuare il debug (sempre che questa attività di correzione degli errori venga svolta), ricordo che ai miei tempi eravamo obbligati a una certa disciplina. Scrivevamo i programmi a <em>mano</em>, su <em>carta</em>, e il computer li leggeva da <em>schede perforate</em>. E tutto questo <em>ci piaceva</em>!
+<p>In questo capitolo scriverete e farete il debug di un insieme di funzioni di utilità per convertire numeri interi in numeri romani e viceversa. Avete visto le meccaniche per la costruzione e la validazione dei numeri romani nel <a href=espressioni-regolari.html#romannumerals>&#8220;Caso di studio: numeri romani&#8221;</a>. Ora fate un passo indietro e considerate come potremmo fare per trasformare quel programma in un&#8217;utilità a due vie.
 <p><a href=espressioni-regolari.html#romannumerals>Le regole per i numeri romani</a> ci hanno condotto a una serie di interessanti osservazioni.
 <ol>
 <li>C&#8217;è un solo modo corretto di rappresentare un particolare numero come numero romano.

File tipi-di-dato-nativi.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>Mettete da parte <a href=il-vostro-primo-programma-python.html>il vostro primo programma Python</a> per un minuto, e parliamo di tipi di dato. In Python, <a href=il-vostro-primo-programma-python.html#declaringfunctions>ogni valore ha un tipo di dato</a>, ma non è necessario dichiarare il tipo di dato delle variabili. Come mai? In base all&#8217;assegnamento originale di ogni variabile, Python capisce di quale tipo è e ne tiene traccia internamente.
+<p class=f>Disinteressatevi del <a href=il-vostro-primo-programma-python.html>vostro primo programma Python</a> per un minuto, e parliamo di tipi di dato. In Python, <a href=il-vostro-primo-programma-python.html#declaringfunctions>ogni valore ha un tipo di dato</a>, ma non è necessario dichiarare il tipo di dato delle variabili. Come mai? In base all&#8217;assegnamento originale di ogni variabile, Python capisce di quale tipo è e ne tiene traccia internamente.
 <p>Python ha molti tipi di dato nativi. Questi sono quelli più importanti:
 <ol>
 <li><b>Booleani</b>: sono solamente <code>True</code> oppure <code>False</code>.

File uso-avanzato-degli-iteratori.html

 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>H<code>AWAII + IDAHO + IOWA + OHIO == STATES</code>. Oppure, per dirlo in un altro modo, <code>510199 + 98153 + 9301 + 3593 == 621246</code>. &Egrave; un episodio di glossolalia? No, è solamente un rompicapo.
-
-<p>Lasciate che vi mostri come scomporlo.
+<p class=f>Laddove le <a href=espressioni-regolari.html>espressioni regolari</a> accrescono enormemente le funzionalità delle <a href=stringhe.html>stringhe</a>, il modulo <code>itertools</code> agisce allo stesso modo nei confronti degli <a href=iteratori.html>iteratori</a>. Ma prima di esaminare le meraviglie di questo modulo, voglio mostrarvi un classico rompicapo.
 
 <pre class=nd><code>HAWAII + IDAHO + IOWA + OHIO == STATES
 510199 + 98153 + 9301 + 3593 == 621246
 </blockquote>
 <p id=toc>&nbsp;
 <h2 id=divingin>Immersione!</h2>
-<p class=f>La maggior parte dei capitoli in questo libro è stata costruita attorno al codice di un programma di esempio. Ma <abbr>XML</abbr> non ha a che fare con il codice; ha a che fare con i dati. Uno degli usi più comuni di <abbr>XML</abbr> è il &#8220;syndication feed&#8221; che elenca gli ultimi articoli di un blog, un forum, o un altro sito web frequentemente aggiornato. La maggior parte dei software più popolari per la gestione di contenuti web è in grado di produrre un feed e aggiornarlo ogni volta che vengono pubblicati nuovi messaggi, discussioni, o articoli. Potete seguire un singolo blog &#8220;abbonandovi&#8221; al suo feed, e potete seguire più di un blog alla volta utilizzando un &#8220;<a href=http://en.wikipedia.org/wiki/List_of_feed_aggregators>aggregatore di feed</a>&#8221; dedicato come <a href=http://www.google.com/reader/>Google Reader</a>.
+<p class=f>Per la maggior parte, i capitoli di questo libro sono stati costruiti attorno al codice di un programma di esempio. Ma <abbr>XML</abbr> non ha a che fare con il codice; ha a che fare con i dati. Uno degli usi più comuni di <abbr>XML</abbr> è il &#8220;syndication feed&#8221; che elenca gli ultimi articoli di un blog, un forum, o un altro sito web frequentemente aggiornato. La maggior parte dei software più popolari per la gestione di contenuti web è in grado di produrre un feed e aggiornarlo ogni volta che vengono pubblicati nuovi messaggi, discussioni, o articoli. Potete seguire un singolo blog &#8220;abbonandovi&#8221; al suo feed, e potete seguire più di un blog alla volta utilizzando un &#8220;<a href=http://en.wikipedia.org/wiki/List_of_feed_aggregators>aggregatore di feed</a>&#8221; dedicato come <a href=http://www.google.com/reader/>Google Reader</a>.
 
 <p>Qui di seguito, dunque, trovate il documento <abbr>XML</abbr> che contiene i dati con cui lavoreremo in questo capitolo. &Egrave; un feed&nbsp;&mdash;&nbsp;nello specifico, un <a href=http://atompub.org/rfc4287.html>syndication feed in formato Atom</a>.