Cosa c'è di nuovo in Python 3

Il modulo __futuro__

Python 3.x ha introdotto alcune parole chiave e funzionalità incompatibili con Python 2 che possono essere importate tramite il modulo __future__ integrato in Python 2. Si consiglia di utilizzare __future__ imports, se si prevede di supportare Python 3.x per il proprio codice.

Ad esempio, se vogliamo il comportamento della divisione intera di Python 3.x in Python 2, aggiungi la seguente istruzione import.

from __future__ import division

La funzione di stampa

Il cambiamento più notevole e più conosciuto in Python 3 è come il printviene utilizzata la funzione. L'uso delle parentesi () con la funzione di stampa è ora obbligatorio. Era opzionale in Python 2.

print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()

La funzione print () inserisce una nuova riga alla fine, per impostazione predefinita. In Python 2, può essere soppresso inserendo "," alla fine. In Python 3, "end = ''" aggiunge spazio invece di newline.

print x,           # Trailing comma suppresses newline in Python 2
print(x, end=" ")  # Appends a space instead of a newline in Python 3

Lettura dell'input dalla tastiera

Python 2 ha due versioni di funzioni di input, input() e raw_input(). La funzione input () tratta i dati ricevuti come stringhe se sono inclusi tra virgolette "" o "", altrimenti i dati vengono trattati come numeri.

In Python 3, la funzione raw_input () è deprecata. Inoltre, i dati ricevuti vengono sempre trattati come stringhe.

In Python 2

>>> x = input('something:') 
something:10 #entered data is treated as number
>>> x
10

>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'

>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'

>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in 
  <module>
   x = raw_input("something:")
NameError: name 'raw_input' is not defined

Divisione intera

In Python 2, il risultato della divisione di due numeri interi viene arrotondato al numero intero più vicino. Di conseguenza, 3/2 mostrerà 1. Per ottenere una divisione in virgola mobile, il numeratore o il denominatore devono essere usati esplicitamente come float. Quindi, 3.0 / 2 o 3 / 2.0 o 3.0 / 2.0 risulterà in 1.5

Python 3 valuta 3/2 come 1.5 per impostazione predefinita, il che è più intuitivo per i nuovi programmatori.

Rappresentazione Unicode

Python 2 richiede di contrassegnare una stringa con au se si desidera memorizzarla come Unicode.

Python 3 memorizza le stringhe come Unicode, per impostazione predefinita. Abbiamo stringhe Unicode (utf-8) e classi di 2 byte: byte e array di byte.

Funzione xrange () rimossa

In Python 2 range () restituisce un elenco e xrange () restituisce un oggetto che genererà gli elementi nell'intervallo solo quando necessario, risparmiando memoria.

In Python 3, la funzione range () è stata rimossa e xrange () è stata rinominata range (). Inoltre, l'oggetto range () supporta lo slicing in Python 3.2 e versioni successive.

sollevare un'eccezione

Python 2 accetta entrambe le notazioni, la sintassi "vecchia" e "nuova"; Python 3 solleva un'eccezione SyntaxError se non racchiudiamo l'argomento dell'eccezione tra parentesi.

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

Argomenti nelle eccezioni

In Python 3, gli argomenti per l'eccezione dovrebbero essere dichiarati con la parola chiave 'as'.

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

funzione next () e metodo .next ()

In Python 2, next () come metodo di oggetto generatore, è consentito. In Python 2, è accettata anche la funzione next (), per iterare sull'oggetto generatore. In Python 3, tuttavia, next (0 come metodo generatore viene interrotto e sollevaAttributeError.

gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3

Utilità 2to3

Insieme all'interprete Python 3, lo script 2to3.py viene solitamente installato nella cartella tools / scripts. Legge il codice sorgente di Python 2.x e applica una serie di fixer per trasformarlo in un codice Python 3.x valido.

Here is a sample Python 2 code (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

To convert into Python 3 version:

$2to3 -w area.py

Converted code :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)