Python 3.0 ha portato numerose novità, rendendosi incompatibile con le versioni precedenti.
Qui un sunto delle novità:
- print nn è più una keyword classica, ma è stato sostiuito con una funzione print(). Prende come argomenti ciò che va stampato, tuttavia ha anche altre utili cose, come l'argomento sep, che ci consente di sciegliere come unire gli argomenti listati:
oppure possiamo specificare un argomento end=" " ad esempio, ciò faràsì che al posto del \n alla fine del print verràinseirto il carattere assegnato ad end
- range() ora si comporta come xrange()
- Gli operatori di confronto sono stati modificati finalmente operazioni come 1 < '' o simili (ossia i confronti fra tipi nn confrontabili dal punto di vista naturale) ora lanciano un TypeError
-è stato rimosso lo statement cmp()
-long/ è stato rimosso. il tipo long nn esiste +, ora esiste solo il tipo int, che però è in grado anche di comportarsi come un long
-nn è + necessario scrivere 1.0/2, ora 1/2 ritorna il numero float, per avere ancora i numeri troncati come in passato bisogna ora fare 1//2
-sys.maxint è stato giustamente rimosso in quanto nn viene + utilizzato
-grazie a dio repr nn includerà+ la L alla fine di un intero lungo. per avere ancora la L usare str()
- le stringhe sono ora tutte di tipo unicode, che ora è chiamato col classico str, mentre le vecchie stringhe 8-bit e gli altri dati binari usano bytes(). Ora inoltre il tentare un mix tra i due lancia un TypeError
-ora nn useremo più u".." per gli unicode, ma b"..." per i binary data
-per fare il mix possiamo usare le conversioni, quindi o str.encode() o bytes.decode()
-bytes è immutabile, come str, ma abbiamo il tipo bytearray
-i caratteri non ASCII sono ora ammessi negli identificatori
-una nuova reserved word è nonlocal. con nonlocal x assegnamo x come variabile nn locale, ma nemmeno globale, insomma qualcosa in mezzo...
-True False e None sono state rese reserved
-except er,var ora è diventato except er as var
-rimosso <> (ora c'è solo != )
-next() è stato trasformato in __next__()
-raw_input ora si chiameràinput, il vecchio input è eval(input())
-rimosso file() ora si usa solo open()
altri cambiamenti erano giàpresenti nella 2.6
Ci sono anche cambiamenti nelle librrie, ad es md5 è stata rimossa (basta e avanza hashlib).
Alcune librerie sono state raggruppate:
dbm (anydbm, dbhash, dbm, dumbdbm, gdbm, whichdb).
html (HTMLParser, htmlentitydefs).
http (httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib).
tkinter (all Tkinter-related modules except turtle).
urllib (urllib, urllib2, urlparse, robotparse).
xmlrpc (xmlrpclib, DocXMLRPCServer, SimpleXMLRPCServer).
Saràinoltre rimosso dopo la 3.1 la formattazione delle stringhe con %
insomma, sono d'accordo su molti cambiamenti, meno su altri (mi piaceva scrivere raw_input, e mi piaceva formattare con %)
Queste sono solo alcuni cambiamenti, quelli che possono dare più problemi per l'abitudine dell'utilizzo.
Qui un sunto delle novità:
- print nn è più una keyword classica, ma è stato sostiuito con una funzione print(). Prende come argomenti ciò che va stampato, tuttavia ha anche altre utili cose, come l'argomento sep, che ci consente di sciegliere come unire gli argomenti listati:
Codice:
print("ciao",55,"s",sep="/")
>>> ciao/55/s #in 2.5 le virgole venivano semplicemente rimosse ed il tutto unito
- range() ora si comporta come xrange()
- Gli operatori di confronto sono stati modificati finalmente operazioni come 1 < '' o simili (ossia i confronti fra tipi nn confrontabili dal punto di vista naturale) ora lanciano un TypeError
-è stato rimosso lo statement cmp()
-long/ è stato rimosso. il tipo long nn esiste +, ora esiste solo il tipo int, che però è in grado anche di comportarsi come un long
-nn è + necessario scrivere 1.0/2, ora 1/2 ritorna il numero float, per avere ancora i numeri troncati come in passato bisogna ora fare 1//2
-sys.maxint è stato giustamente rimosso in quanto nn viene + utilizzato
-grazie a dio repr nn includerà+ la L alla fine di un intero lungo. per avere ancora la L usare str()
- le stringhe sono ora tutte di tipo unicode, che ora è chiamato col classico str, mentre le vecchie stringhe 8-bit e gli altri dati binari usano bytes(). Ora inoltre il tentare un mix tra i due lancia un TypeError
-ora nn useremo più u".." per gli unicode, ma b"..." per i binary data
-per fare il mix possiamo usare le conversioni, quindi o str.encode() o bytes.decode()
-bytes è immutabile, come str, ma abbiamo il tipo bytearray
-i caratteri non ASCII sono ora ammessi negli identificatori
-una nuova reserved word è nonlocal. con nonlocal x assegnamo x come variabile nn locale, ma nemmeno globale, insomma qualcosa in mezzo...
-True False e None sono state rese reserved
-except er,var ora è diventato except er as var
-rimosso <> (ora c'è solo != )
-next() è stato trasformato in __next__()
-raw_input ora si chiameràinput, il vecchio input è eval(input())
-rimosso file() ora si usa solo open()
altri cambiamenti erano giàpresenti nella 2.6
Ci sono anche cambiamenti nelle librrie, ad es md5 è stata rimossa (basta e avanza hashlib).
Alcune librerie sono state raggruppate:
dbm (anydbm, dbhash, dbm, dumbdbm, gdbm, whichdb).
html (HTMLParser, htmlentitydefs).
http (httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib).
tkinter (all Tkinter-related modules except turtle).
urllib (urllib, urllib2, urlparse, robotparse).
xmlrpc (xmlrpclib, DocXMLRPCServer, SimpleXMLRPCServer).
Saràinoltre rimosso dopo la 3.1 la formattazione delle stringhe con %
insomma, sono d'accordo su molti cambiamenti, meno su altri (mi piaceva scrivere raw_input, e mi piaceva formattare con %)
Queste sono solo alcuni cambiamenti, quelli che possono dare più problemi per l'abitudine dell'utilizzo.