Commits

giu...@macbeth  committed e8b6c8a

Catching up with six weeks worth of minor adjustments to the original DiP3.

  • Participants
  • Parent commits 22664c9

Comments (0)

Files changed (33)

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

 <li>I test sono essenziali. Non convertite nulla senza di loro. L&#8217;<em>unica</em> ragione per cui ho una qualche confidenza che <code>chardet</code> funzioni in Python 3 è perché ho cominciato con una serie di test che esercitava tutti i percorsi principali all&#8217;interno del codice. Se non avete nessun test, scrivetene alcuni prima di cominciare a convertire verso Python 3. Se avete alcuni test, scrivetene altri. Se avete molti test, allora il vero divertimento può cominciare.
 </ol>
 <p class=v><a href=servizi-web-http.html rel=prev title='indietro a &#8220;Servizi web HTTP&#8221;'><span class=u>&#x261C;</span></a> <a href=distribuire-librerie-python.html rel=next title='avanti a &#8220;Distribuire librerie Python&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File colophon.html

 <li><a href=http://optipng.sourceforge.net/>OptiPNG</a>
 </ul>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/dip3.js></script>
 <!--[if IE]><script src=j/html5.js></script><![endif]-->

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

 </table>
 
 <p class=v><a rel=prev href=distribuire-librerie-python.html title='indietro a &#8220;Distribuire librerie Python&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=nomi-dei-metodi-speciali.html title='avanti a &#8220;Nomi dei metodi speciali&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File descrizioni.html

 <li><a href=http://docs.python.org/3.1/tutorial/datastructures.html#looping-techniques>Tecniche di attraversamento</a>
 </ul>
 <p class=v><a href=tipi-di-dato-nativi.html rel=prev title='indietro a &#8220;Tipi di dato nativi&#8221;'><span class=u>&#x261C;</span></a> <a href=stringhe.html rel=next title='avanti a &#8220;Stringhe&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>
   margin: 1.75em 0;
   font-size: medium;
 }
-sup {
-  text-transform: uppercase;
-  vertical-align: text-top;
-  padding-left: 1px;
-}
 
 /* basics */
 

File distribuire-librerie-python.html

 </ul>
 
 <p class=v><a rel=prev href=caso-di-studio-convertire-chardet-verso-python-3.html title='indietro a &#8220;Caso di studio: convertire chardet verso Python 3&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=convertire-codice-verso-python-3-con-2to3.html title='avanti a &#8220;Convertire codice verso Python 3 con 2to3&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File dove-proseguire-da-qui.html

 
 <p class=v><a rel=prev href=nomi-dei-metodi-speciali.html title='indietro a &#8220;Nomi dei metodi speciali&#8221;'><span class=u>&#x261C;</span></a> <a href=vuota.html rel=next><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/dip3.js></script>

File espressioni-regolari.html

 </ul>
 <p>Le espressioni regolari sono estremamente potenti, ma non sono la soluzione corretta per tutti i problemi. Dovreste imparare a conoscerle abbastanza da sapere quando sono appropriate, quando risolveranno i vostri problemi, e quando causeranno più problemi di quelli che risolvono.
 <p class=v><a href=stringhe.html rel=prev title='indietro a &#8220;Stringhe&#8221;'><span class=u>&#x261C;</span></a> <a href=generatori.html rel=next title='avanti a &#8220;Chiusure &amp; generatori&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>
 body{counter-reset:h1 11}
 mark{display:inline}
 </style>
-<link rel=stylesheet type=text/css media='only screen and (max-device-width: 480px)' href=mobile.css>
+<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>
 <link rel=stylesheet media=print href=print.css>
 <meta name=viewport content='initial-scale=1.0'>
 <form action=http://www.google.com/cse><div><input type=hidden name=cx value=014021643941856155761:l5eihuescdw><input type=hidden name=ie value=UTF-8>&nbsp;<input type=search name=q size=25 placeholder="powered by Google&trade;">&nbsp;<input type=submit name=sa value=Search></div></form>
 <li>Cominciate baldanzosamente creando il nuovo file <code>test.log</code> (oppure sovrascrivendo il file esistente) e aprendo il file per la scrittura. Usare il parametro <code>mode='w'</code> significa aprire il file in scrittura. Sì, questo è tanto pericoloso quanto sembra. Spero che non vi interessassero i contenuti precedenti di quel file (se c&#8217;erano) perché quei dati ora sono scomparsi.
 <li>Potete aggiungere dati al file appena aperto con il metodo <code>write()</code> dell&#8217;oggetto stream restituito dalla funzione <code>open()</code>. Dopo che il blocco <code>with</code> si è concluso, Python chiude automaticamente il file.
 <li>&Egrave; stato così divertente, facciamolo ancora. Ma questa volta con <code>mode='a'</code>, per aggiungere i dati in coda al file invece di sovrascriverlo. Questa modalità non danneggerà <em>mai</em> i contenuti esistenti del file.
-<li>Il file <code>test.log</code> ora contiene sia la riga originale che avete scritto sia la seconda riga che avete aggiunto. Notate anche che i ritorni a capo non sono inclusi. Dato che entrambe le volte non li avete scritti esplicitamente sul file, il file non li contiene. Potete scrivere un ritorno a capo usando il carattere <code>'\n'</code>. Dato che non lo avete fatto, tutto quello che avete scritto sul file è finito su un&#8217;unica riga.
+<li>Il file <code>test.log</code> ora contiene sia la riga originale che avete scritto sia la seconda riga che avete aggiunto. Notate anche che i caratteri di ritorno a capo e di fine riga non sono inclusi. Dato che entrambe le volte non li avete scritti esplicitamente sul file, il file non li contiene. Potete scrivere un carattere di ritorno a capo usando <code>'\r'</code> e/o un carattere di fine riga usando <code>'\n'</code>. Dato che non avete fatto né l&#8217;una né l&#8217;altra cosa, tutto quello che avete scritto sul file è finito su un&#8217;unica riga.
 </ol>
 
 <h3 id=encoding-again>La codifica di carattere, ancora una volta</h3>
 
 <p class=v><a href=refactoring.html rel=prev title='indietro a &#8220;Refactoring&#8221;'><span class=u>&#x261C;</span></a> <a href=xml.html rel=next title='avanti a &#8220;XML&#8221;'><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=about.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=about.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File generatori.html

 <ol>
 <li><code>build_match_and_apply_functions()</code> è una funzione che costruisce dinamicamente altre funzioni. Accetta in ingresso <var>pattern</var>, <var>search</var> e <var>replace</var>, poi definisce una funzione <code>matches_rule()</code> che chiama <code>re.search()</code> con il <var>pattern</var> che è stato passato alla funzione <code>build_match_and_apply_functions()</code> e con la parola <var>word</var> che è stata passata alla funzione <code>matches_rule()</code> che state costruendo. Whoa.
 <li>La funzione di sostituzione viene costruita allo stesso modo. Accetta un parametro e chiama <code>re.sub()</code> utilizzando sia i parametri <var>search</var> e <var>replace</var> che sono stati passati alla funzione <code>build_match_and_apply_functions()</code> sia la parola <var>word</var> che è stata passata alla funzione <code>apply_rule()</code> stessa. Questa tecnica di usare i valori di parametri esterni all&#8217;interno di una funzione dinamica è chiamata <em>chiusura</em>. State essenzialmente definendo delle costanti nell&#8217;ambito della funzione di sostituzione che state costruendo; quest&#8217;ultima accetta un parametro (<var>word</var>), ma poi agisce su quello più altri due valori (<var>search</var> e <var>replace</var>) che sono stati impostati nel momento in cui la funzione di sostituzione è stata definita.
-<li>Infine, la funzione <code>build_match_and_apply_functions()</code> restituisce una tupla di due valori: le due funzioni che avete appena creato. Le costanti definite in quelle funzioni (<var>pattern</var> nell&#8217;ambito di <code>match_rule()</code>, <var>search</var> e <var>replace</var> nell&#8217;ambito di <code>apply_rule()</code>) mantengono il loro valore in quelle funzioni persino dopo che <code>build_match_and_apply_functions()</code> le ha restituite. Questo è davvero fantastico.
+<li>Infine, la funzione <code>build_match_and_apply_functions()</code> restituisce una tupla di due valori: le due funzioni che avete appena creato. Le costanti definite in quelle funzioni (<var>pattern</var> nell&#8217;ambito di <code>matches_rule()</code>, <var>search</var> e <var>replace</var> nell&#8217;ambito di <code>apply_rule()</code>) mantengono il loro valore in quelle funzioni persino dopo che <code>build_match_and_apply_functions()</code> le ha restituite. Questo è davvero fantastico.
 </ol>
 
 <p>Se questa tecnica vi risulta incredibilmente confusa (e dovrebbe, è roba strana), potrebbe diventare più chiara nel momento in cui vedete come si usa.
 
 <p class=v><a rel=prev href=espressioni-regolari.html title='indietro a &#8220;Espressioni regolari&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=iteratori.html title='avanti a &#8220;Classi &amp; iteratori&#8221;'><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

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

 <li><a href=http://docs.python.org/3.1/reference/><cite>Guida di riferimento a Python</cite></a> spiega cosa significa dire che <a href=http://docs.python.org/3.1/reference/datamodel.html#objects-values-and-types>ogni cosa in Python è un oggetto</a>, perché alcune persone sono <a href=http://www.douglasadams.com/dna/pedants.html>pedanti</a> e adorano discutere questo tipo di cose in lungo e in largo.
 </ul>
 <p class=v><a href=installare-python.html rel=prev title='indietro a &#8220;Installare Python&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=tipi-di-dato-nativi.html title='avanti a &#8220;Tipi di dato nativi&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>
 
 <p class='c nm'>Questo sito è ottimizzato per Lynx giusto perché fottetevi.<br>Mi dicono si veda bene anche nei browser grafici.
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 </ol>
 </ol>
 <!-- /toc -->
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <!--[if IE]><script src=j/html5.js></script><![endif]-->

File informazioni-sul-libro.html

 </div>
 </div>
 
-<p class=c>&copy; 2001&ndash;9 <a href=colophon.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=colophon.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <!--[if IE]><script src=j/html5.js></script><![endif]-->

File informazioni-sulla-traduzione.html

 <p>I sorgenti della traduzione italiana <a href=http://bitbucket.org/gpiancastelli/diveintopython3-it>sono disponibili su Bitbucket</a>. Il modo migliore per comunicare suggerimenti e segnalare problemi, errori, o sviste è quello di usare lo <a href=http://bitbucket.org/gpiancastelli/diveintopython3-it/issues>strumento apposito</a> messo a disposizione da Bitbucket. In alternativa, potete inviare un&#8217;email a <a href=mailto:giulio.piancastelli@gmail.com>giulio.piancastelli@gmail.com</a>.
 </div>
 </div>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 Giulio Piancastelli per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 Giulio Piancastelli per la traduzione italiana
 <!--[if IE]><script src=j/html5.js></script><![endif]-->

File installare-python.html

 #which{padding-top:1.75em}
 h2,.i>li{clear:both}
 </style>
-<link rel=stylesheet type=text/css media='only screen and (max-device-width: 480px)' href=mobile.css>
+<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>
 <link rel=stylesheet media=print href=print.css>
 <meta name=viewport content='initial-scale=1.0'>
 <form action=http://www.google.com/cse><div><input type=hidden name=cx value=014021643941856155761:l5eihuescdw><input type=hidden name=ie value=UTF-8>&nbsp;<input type=search name=q size=25 placeholder="powered by Google&trade;">&nbsp;<input type=submit name=sa value=Search></div></form>
 
 <p class=v><a href=novità.html rel=prev title='indietro a &#8220;Cosa c&#8217;è di nuovo in Immersione in Python 3&#8221;'><span class=u>&#x261C;</span></a> <a href=il-vostro-primo-programma-python.html rel=next title='avanti a &#8220;Il vostro primo programma Python&#8221;'><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File iteratori.html

 
 <p class=v><a rel=prev href=generatori.html title='indietro a &#8220;Chiusure &amp; generatori&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=uso-avanzato-degli-iteratori.html title='avanti a &#8220;Uso avanzato degli iteratori&#8221;'><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>
 function showTOC() {
     var toc = '';
     var old_level = 1;
+    var level;
     $('h2,h3').each(function(i, h) {
 	    level = parseInt(h.tagName.substring(1));
 	    if (level < old_level) {
-<script>var gaJsHost="http://www.";document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script>try{var pageTracker=_gat._getTracker("UA-10482652-1");pageTracker._trackPageview();}catch(err){}</script>
+<script>_gaq=[['_setAccount','UA-10482652-1'],['_trackPageview']];(function(){var g=document.createElement('script');g.src='//www.google-analytics.com/ga.js';g.setAttribute('async','true');document.documentElement.firstChild.appendChild(g);})();</script>

File nomi-dei-metodi-speciali.html

 </ul>
 
 <p class=v><a rel=prev href=convertire-codice-verso-python-3-con-2to3.html title='indietro a &#8220;Convertire codice verso Python 3 con 2to3&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=dove-proseguire-da-qui.html title='avanti a &#8220;Dove proseguire da qui&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File novità.html

 
 <p>Un&#8217;altra novità di Python&nbsp;&mdash;&nbsp;non nel linguaggio ma nella comunità&nbsp;&mdash;&nbsp;è la comparsa di archivi di codice come il <a href=http://pypi.python.org/>Python Package Index</a> (PyPI, Indice dei Pacchetti Python). Python viene distribuito con alcuni strumenti utili per impacchettare il vostro codice in formati standard e distribuire quei pacchetti su PyPI. Leggete il capitolo <a href=distribuire-librerie-python.html>Distribuire librerie Python</a> per conoscere i dettagli.
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana

File prefazione.html

 <p>Jesse Noller<br>
 Programmatore Python
 
-<p class=c>&copy; 2009 <a href=http://jessenoller.com/2009/10/25/dive-into-python-3-the-foreward>Jesse Noller</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2009&ndash;10 <a href=http://jessenoller.com/2009/10/25/dive-into-python-3-the-foreward>Jesse Noller</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 # build sitemap
 ls build/*.html | sed -e "s|build/|http://gpiancastelli.altervista.org/dip3-it/|g" -e "s|/index.html|/|g" > build/sitemap.txt || die "Failed to build sitemap"
 
-echo "adding evil tracking code"
-# add Google Analytics script
-for f in build/*.html; do
-  cat "$f" j/ga.js > build/tmp && \
-      mv build/tmp "$f" || die "Could not add tracking code to $f"
-done
-
 # minimize JS and CSS
 echo "minimizing JS"
-revision=`hg log|grep changeset|cut -d":" -f3|head -1`
-java -jar util/yuicompressor-2.4.2.jar build/j/prettify.js > build/j/prettify.min.js && \
-    java -jar util/yuicompressor-2.4.2.jar build/j/dip3.js > build/j/dip3.min.js || die "Failed to minimize JS"
+java -jar util/compiler.jar build/j/prettify.js > build/j/prettify.min.js && \
+    java -jar util/compiler.jar build/j/dip3.js > build/j/dip3.min.js || die "Failed to minimize JS"
 
 # combine jQuery and our script
 echo "combining JS"
     sed -i -e "s|;}|}|g" build/p-$revision.css || die "Failed to minimize CSS"
 
 # put CSS inline and remove unused CSS properties on a page-by-page basis
-echo "inlining CSS"
+# minimize URLs by stripping "http:" prefix
+# add asynchronous Google Analytics script in head (after inline styles)
+echo "inlining CSS, minimizing URLs, adding evil tracking code"
+ga=`cat j/ga.js`
 for f in build/*.html; do
   css=`python2.6 util/lesscss.py "$f" "build/$revision.css"` || die "Failed to remove unused CSS"
   mobilecss=`python2.6 util/lesscss.py "$f" "build/m-$revision.css"` || die "Failed to remove unused CSS"
   printcss=`python2.6 util/lesscss.py "$f" "build/p-$revision.css"` || die "Failed to remove unused CSS"
   sed -i -e "s|<link rel=stylesheet href=dip3.css>|<style>${css}</style>|g" -e "s|<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>|<style>@media screen and (max-device-width:480px){${mobilecss}}</style>|g" -e "s|<link rel=stylesheet media=print href=print.css>|<style>@media print{${printcss}}</style>|g" -e "s|</style><style>||g" "$f" || die "Failed to inline CSS"
+  # files are not available from URL root
+  sed -i -e "s|=http:|=|g" -e "s|href=index.html|href=/dip3-it|g" "$f" || die "Failed to minimize URLs"
+  sed -i -e "s|</style>|</style>${ga}|g" "$f" || die "Failed to add evil tracking code"
 done
 
-# minimize URLs
-echo "minimizing URLs"
-sed -i -e "s|=http:|=|g" build/*.html && \
-    # files are not available from URL root
-    sed -i -e "s|href=index.html|href=/dip3-it|g" build/*.html || die "Failed to minimize URLs"
-
 # set file permissions (hg resets these, don't know why)
 chmod 755 build/esempi build/j build/i build/d && \
 #chmod 644 build/*.html build/*.css build/*.txt build/*.zip build/examples/* build/examples/.htaccess build/j/* build/j/.htaccess build/i/* build/i/.htaccess build/d/.htaccess build/.htaccess || die "Failed to reset file permissions"

File refactoring.html

 </ul>
 
 <p class=v><a href=test-di-unità.html rel=prev title='indietro a &#8220;Test di unità&#8221;'><span class=u>&#x261C;</span></a> <a href=file.html rel=next title='avanti a &#8220;File&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File serializzare-oggetti-python.html

 </ul>
 
 <p class=v><a rel=prev href=xml.html title='indietro a &#8220;XML&#8221;'><span class=u>&#x261C;</span></a> <a rel=next href=servizi-web-http.html title='avanti a &#8220;Servizi web HTTP&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=about.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=about.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File servizi-web-http.html

 </ul>
 
 <p class=v><a href=serializzare-oggetti-python.html rel=prev title='indietro a &#8220;Serializzare oggetti Python&#8221;'><span class=u>&#x261C;</span></a> <a href=caso-di-studio-convertire-chardet-verso-python-3.html rel=next title='avanti a &#8220;Caso di studio: convertire chardet verso Python 3&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=about.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=about.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File stringhe.html

 
 <p class=v><a href=descrizioni.html rel=prev title='indietro a &#8220;Descrizioni&#8221;'><span class=u>&#x261C;</span></a> <a href=espressioni-regolari.html rel=next title='avanti a &#8220;Espressioni regolari&#8221;'><span class=u>&#x261E;</span></a>
 
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File test-di-unità.html

 <ol>
 <li>Per scrivere un test, come prima cosa estendete la classe <code>TestCase</code> del modulo <code>unittest</code>. Questa classe mette a disposizione molti metodi utili che potete usare nel vostro test per esprimere specifiche condizioni di collaudo.
 <li>Questa è una lista di coppie interi/romani che ho verificato manualmente. Include i dieci numeri più bassi, il numero più alto, ogni numero che si traduce in un numero romano con un singolo carattere e una serie di esempi casuali di altri numeri validi. Non dovete collaudare ogni possibile ingresso, ma dovreste provare a collaudare tutti gli ovvi casi limite.
-<li>Ogni test individuale ha il proprio metodo, che non deve prendere alcun parametro né restituire alcun valore. Se il metodo ritorna normalmente senza sollevare un&#8217;eccezione, il test si considera passato; se il metodo solleva un&#8217;eccezione, il test si considera fallito.
+<li>Ogni test individuale ha il proprio metodo. Un metodo di test non prende parametri, non restituisce alcun valore e deve avere un nome che comincia con le quattro lettere <code>test</code>. Se il metodo di test ritorna normalmente senza sollevare un&#8217;eccezione, il test si considera passato; se il metodo solleva un&#8217;eccezione, il test si considera fallito.
 <li>Qui potete chiamare la funzione <code>to_roman()</code>. (Be&#8217;, la funzione non è ancora stata scritta, ma una volta che lo sarà questa è la riga che la chiamerà.) Notate che avete definito la <abbr>API</abbr> per la funzione <code>to_roman()</code>: deve prendere un intero (il numero da convertire) e restituire una stringa (la rappresentazione come numero romano). Se la <abbr>API</abbr> è differente, il test si considera fallito. Notate anche che state intenzionalmente evitando di catturare alcuna eccezione quando chiamate <code>to_roman()</code>. La funzione non dovrebbe sollevare alcuna eccezione quando la chiamate con un ingresso valido, e questi valori di ingresso sono tutti validi. Se <code>to_roman()</code> solleva un&#8217;eccezione, questo test si considera fallito.
 <li>Supponendo che la funzione <code>to_roman()</code> sia stata definita correttamente, invocata correttamente, abbia completato con successo la propria esecuzione e abbia restituito un valore, l&#8217;ultimo passo è controllare se ha restituito il valore <em>corretto</em>. Questa è una necessità talmente comune che la classe <code>TestCase</code> vi fornisce il metodo <code>assertEqual()</code> per controllare se due valori sono uguali. Se il risultato restituito da <code>to_roman()</code> (<var>result</var>) non corrisponde al valore noto che vi stavate aspettando (<var>numeral</var>), <code>assertEqual()</code> solleverà un&#8217;eccezione e il test fallirà. Se i due valori sono uguali, <code>assertEqual()</code> non farà nulla. Se tutti i valori restituiti da <code>to_roman()</code> corrispondono ai valori che vi aspettate, <code>assertEqual()</code> non solleverà mai alcuna eccezione, così <code>test_to_roman_known_values()</code> concluderà normalmente la propria esecuzione, il che significa che <code>to_roman()</code> avrà passato questo test.
 </ol>
 <p>E il premio anticlimax dell&#8217;anno va&hellip; alla parola &#8220;<code>OK</code>&#8221;, che viene stampata dal modulo <code>unittest</code> quando tutti i test passano.
 
 <p class=v><a href=uso-avanzato-degli-iteratori.html rel=prev title='indietro a &#8220;Uso avanzato degli iteratori&#8221;'><span class=u>&#x261C;</span></a> <a href=refactoring.html rel=next title='avanti a &#8220;Refactoring&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File tipi-di-dato-nativi.html

 <ol>
 <li>L&#8217;operatore <code>/</code> esegue la divisione in virgola mobile. Restituisce un <code>float</code> anche quando il numeratore e il denominatore sono entrambi numeri di tipo <code>int</code>.
 <li>L&#8217;operatore <code>//</code> esegue un tipo strambo di divisione tra interi. Quando il risultato è positivo, potete immaginarla come un troncamento (non un arrotondamento) a 0 decimali, ma fate attenzione.
-<li>Quando eseguite la divisione intera tra numeri negativi, l&#8217;operatore <code>//</code> arrotonda &#8220;per eccesso&#8221; verso l&#8217;intero più vicino. Matematicamente parlando, l&#8217;arrotondamento è &#8220;per difetto&#8221;, dato che <code>&minus;6</code> è inferiore a <code>&minus;5</code>, ma se vi attendete un troncamento a <code>&minus;5</code> potreste essere indotti in errore.
+<li>Quando eseguite la divisione intera tra numeri negativi, l&#8217;operatore <code>//</code> arrotonda &#8220;per eccesso&#8221; verso l&#8217;intero più vicino. Matematicamente parlando, l&#8217;arrotondamento è &#8220;per difetto&#8221; dato che <code>&minus;6</code> è inferiore a <code>&minus;5</code>, ma se vi aspettate un troncamento a <code>&minus;5</code> potreste essere indotti in errore.
 <li>L&#8217;operatore <code>//</code> non restituisce sempre un intero. Se il numeratore o il denominatore sono di tipo <code>float</code>, effettuerà un arrontondamento all&#8217;intero più vicino, ma l&#8217;effettivo valore di ritorno sarà un <code>float</code>.
 <li>L&#8217;operatore <code>**</code> significa &#8220;elevato alla potenza di&#8221;. <code>11<sup>2</sup></code> vale <code>121</code>.
 <li>L&#8217;operatore <code>%</code> dà il resto dopo aver effettuato una divisione di tipo intero. <code>11</code> diviso per <code>2</code> vale <code>5</code> con il resto di <code>1</code>, quindi il risultato in questo caso è <code>1</code>.
 
 <h2 id=sets>Insiemi</h2>
 
-<p>Un <dfn>insieme</dfn> è un &#8220;gruppo&#8221; non ordinato di valori unici. Un singolo insieme può contenere valori di qualsiasi tipo di dato. Una volta che avete due insiemi, potete effettuare le classiche operazioni sugli insiemi come l&#8217;unione, l&#8217;intersezione e la differenza tra insiemi.
+<p>Un <dfn>insieme</dfn> è un &#8220;gruppo&#8221; non ordinato di valori unici. Un singolo insieme può contenere valori di qualsiasi tipo di dato immutabile. Una volta che avete due insiemi, potete effettuare le classiche operazioni sugli insiemi come l&#8217;unione, l&#8217;intersezione e la differenza tra insiemi.
 
 <h3 id=creating-a-set>Creare un insieme</h3>
 
 <li><a href=http://www.python.org/dev/peps/pep-0238/><abbr>PEP</abbr> 238: Modificare l&#8217;operatore di divisione</a>
 </ul>
 <p class=v><a href=il-vostro-primo-programma-python.html rel=prev title='indietro a &#8220;Il vostro primo programma Python&#8221;'><span class=u>&#x261C;</span></a> <a href=descrizioni.html rel=next title='avanti a &#8220;Descrizioni&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File uso-avanzato-degli-iteratori.html

 <p>Molte grazie a Raymond Hettinger per aver accettato di ridistribuire il suo codice con una licenza diversa in modo che io potessi convertirlo verso Python 3 e usarlo come base per questo capitolo.
 
 <p class=v><a href=iteratori.html rel=prev title='indietro a &#8220;Classi &amp; iteratori&#8221;'><span class=u>&#x261C;</span></a> <a href=test-di-unità.html rel=next title='avanti a &#8220;Test di unità&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>

File util/compiler.jar

Binary file added.

File util/flatten.py

 
 # get list of chapters
 chapters = []
-for line in open('index.html'):
+for line in open('index.html', encoding="utf-8"):
     if not line.count('<li') or not line.count('<a href'):
         continue
     chapters.append(line.split('<a href=', 1)[1].split('>', 1)[0])
 </ul>
 
 <p class=v><a href=file.html rel=prev title='indietro a &#8220;File&#8221;'><span class=u>&#x261C;</span></a> <a href=serializzare-oggetti-python.html rel=next title='avanti a &#8220;Serializzare oggetti Python&#8221;'><span class=u>&#x261E;</span></a>
-<p class=c>&copy; 2001&ndash;9 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
-&copy; 2009 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
+<p class=c>&copy; 2001&ndash;10 <a href=informazioni-sul-libro.html>Mark Pilgrim</a><br>
+&copy; 2009&ndash;10 <a href=informazioni-sulla-traduzione.html>Giulio Piancastelli</a> per la traduzione italiana
 <script src=j/jquery.js></script>
 <script src=j/prettify.js></script>
 <script src=j/dip3.js></script>