Nel wiki ufficiale http://wiki.python.org/ trovate
Python 2.x is the status quo, Python 3.x is the present and future of the language
Allora migriamo tutti alla versione 3 –nel frattempo arrivata a 3.2? Io sarei per il sì ma ci sono ancora casi in cui ciò non è possibile. Per esempio io ho implementato le mie app usando come GUI Wx e Wx non è stato aggiornato alla nuova versione e, peggio ancora, non si sa quando questo avverrà. Esistono GUI alternative già disponibili, PyQt e PyGobject per esempio, e se non ci saranno novità non è detto che… Ma non subito.
Le modifiche non sono poi così tante ma, secondo me, richiedono più di un post. Si potrebbe partire seguendo Guido, nella pagina “What’s New In Python 3.0“, a dispetto del titolo aggiornata alla release 3.2.2.
Comincio invece con una panoramica veloce. Anzi c’è chi l’ha già fatto, la trovate qui. Per i miei affezionati lettori sapete cosa faccio? Lo traduco, quasi 8)
print non è più un’istruzione ma una funzione. E come tale vuole le parentesi.
Python 2: print "The answer is", 42
Python 3: print("The answer is", 42)
Output: The answer is 42
Python 2: print
Python 3: print()
Output: newline
Per formattare l’output py2 usa una sintassi speciale mentre py3 usa le keyword sep e end.
Python 2:
print "The answer is", # comma suppresses newline
print 42
Output: The answer is 42
Python 3:
print("The answer is", end=" ")
print(42)
Output: The answer is 42
Python 3: print("01","12","1981",sep="-")
Output: 0
1-12-1981
Si può usare print() anche in py2, basta importare print_function dal modulo future
from future import print_function
Divisione fra interi
In py2 la divisione fra interi ritorna un intero troncando il risultato. Per avere un float si deve avere almeno un float ( o fare un cast). In py3 la divisione ritorna un float, anche se il risultato è un intero. Esiste l’operatore // che si comporta come / in py2.
Python 2: 4/3 # result is 1
Python 2: 3/3 # result is 1
Python 2: 4.0/3 # result is 1.33333
Python 2: 3.0/3 # result is 1.0
Python 3: 4/3 # result is 1.33333
Python 3: 3/3 # result is 1.0
Python 3: 4//3 # result is 1
Python 3: 3//3 # result is 1
Al solito in py2 si possono usare gli operatori di py3 impotando division dal modulo future
from future import division
input
La funzione raw_input() di py2 è stata rinominata input() in py3. Notare che le due funzioni ritornano una string; eseguire un cast se del caso
Python 2: the_input = raw_input() # the_input is of type string
Python 3: the_input = input() # the_input is of type string
Python 2: the_input = float(raw_input()) # the_input is of type float
Python 2: the_input = int(raw_input()) # the_input is of type int
Python 3: the_input = float(input()) # the_input is of type float
Python 3: the_input = int(input()) # the_input is of type int
file
Il comando file di py2 è stato rimosso. Occorre usare la funzione open() (che in realtà c’era da tempo in py2).
Python 2:
for line in file("my_file.txt"): print line
Python 3:
myFile = open("my_file.txt",'r') for line in myFile: print line
range
La funzione range() in py3 è l’equivalente di xrange() di py2, non ritorna una lista e può gestire un intervallo arbitrariamente ampio
Python 2: L = range(10) # L is [0,1,2,3,4,5,6,7,8,9]
Python 3: L = list(range(10)) # L is [0,1,2,3,4,5,6,7,8,9]
questa istruzione genera un errore in py2 ma è valida in py3
for i in range(1000000000000): # 1'000'000'000'000 = mille miliardi
OK! queste in sintesi le variazioni tra le versioni 2 e 3 di Python.
Saranno esaminate in dettaglio. Prossimamente 🙂
Aggiornato, corretto un paio di errori, grazie Step. – Hawk1 😀
Commenti
Io queste cose mica le sapevo. Mi ritornava sempre “Errore di sintassi” Se non sono impazzito al 100% il merito è tuo, caro Juhuan 😀
Vedi? Volevo dire Juhan! 🙂
Allora il blog serve 8) e comunque mi diverte e anche questo è l’importante 😀
Ci sono degli errori:
Python 3: print(“01″,”12″,”1981″,sep=”-“)
Output: 12-09-2011 –> ???
L’Output è 01-12-1981
Divisione fra interi:
Python 2: 4/3 # result is 0 –> No, da 1 (Elide la parte decimale)
Hai ragione!!!
Correggo prima di subito. È rimasto errato per più di un anno 😦
Conto di averti come revisore anche in futuro 😀
Hahahahah, ^_^ Felice di esser stato d’aiuto.
Mi sono inoltrato in python ri-leggendo tutto un libro sul python 2.5 che avevo accantonato qualche anno fa, ma provando a fare qualche esercizietto sono entrato nel panico, -> Articolo Molto Utile! 😉 Grazie.!
ci voleva proprio !!!
Trackback
[…] post Python – differenze fra le versioni 2 e 3 che non voleva essere un introduzione a una (lunga quanto basta) serie sull’argomento ha […]