Quoi de neuf dans Python 3

Le module __future__

Python 3.x a introduit des mots clés et fonctionnalités incompatibles avec Python 2 qui peuvent être importés via le module intégré __future__ de Python 2. Il est recommandé d'utiliser les importations __future__, si vous prévoyez la prise en charge de Python 3.x pour votre code.

Par exemple, si nous voulons le comportement de division d'entiers de Python 3.x dans Python 2, ajoutez l'instruction d'importation suivante.

from __future__ import division

La fonction d'impression

Le changement le plus notable et le plus connu de Python 3 est la façon dont le printla fonction est utilisée. L'utilisation de parenthèses () avec la fonction d'impression est désormais obligatoire. C'était facultatif dans Python 2.

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

La fonction print () insère une nouvelle ligne à la fin, par défaut. Dans Python 2, il peut être supprimé en mettant «,» à la fin. Dans Python 3, "end = ''" ajoute un espace au lieu d'une nouvelle ligne.

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

Lecture de l'entrée depuis le clavier

Python 2 a deux versions de fonctions d'entrée, input() et raw_input(). La fonction input () traite les données reçues comme une chaîne si elles sont incluses entre guillemets '' ou "", sinon les données sont traitées comme un nombre.

Dans Python 3, la fonction raw_input () est obsolète. De plus, les données reçues sont toujours traitées comme une chaîne.

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

Division entière

Dans Python 2, le résultat de la division de deux entiers est arrondi à l'entier le plus proche. En conséquence, 3/2 affichera 1. Pour obtenir une division en virgule flottante, le numérateur ou le dénominateur doit être explicitement utilisé comme flottant. Par conséquent, 3,0 / 2 ou 3 / 2,0 ou 3,0 / 2,0 entraîneront 1,5

Python 3 évalue 3/2 comme 1,5 par défaut, ce qui est plus intuitif pour les nouveaux programmeurs.

Représentation Unicode

Python 2 vous oblige à marquer une chaîne avec au si vous souhaitez la stocker au format Unicode.

Python 3 stocke les chaînes au format Unicode, par défaut. Nous avons des chaînes Unicode (utf-8) et 2 classes d'octets: des tableaux d'octets et d'octets.

Fonction xrange () supprimée

En Python 2, range () renvoie une liste et xrange () renvoie un objet qui ne générera que les éléments de la plage lorsque cela sera nécessaire, économisant ainsi de la mémoire.

Dans Python 3, la fonction range () est supprimée et xrange () a été renommé en range (). De plus, l'objet range () prend en charge le découpage dans Python 3.2 et versions ultérieures.

lever une exception

Python 2 accepte les deux notations, la syntaxe «ancienne» et «nouvelle»; Python 3 lève une SyntaxError si nous ne mettons pas l'argument d'exception entre parenthèses.

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

Arguments dans les exceptions

Dans Python 3, les arguments d'exception doivent être déclarés avec le mot clé 'as'.

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

Fonction next () et méthode .next ()

En Python 2, next () en tant que méthode d'objet générateur, est autorisé. En Python 2, la fonction next (), pour itérer sur un objet générateur, est également acceptée. Dans Python 3, cependant, suivant (0 en tant que méthode de générateur est interrompu et augmenteAttributeError.

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

Utilitaire 2to3

Avec l'interpréteur Python 3, le script 2to3.py est généralement installé dans le dossier tools / scripts. Il lit le code source Python 2.x et applique une série de correcteurs pour le transformer en un code Python 3.x valide.

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)