Vous êtes ici : Accueil Tutoriels Nouveautés Python 3.3

Nouveautés Python 3.3

Cet article reprend les annonces faites sur le site officiel de Python pour résumer les nouveautés.

Générateurs

Une syntaxe allégée permet de remplacer ceci :

for v in g:
    yield v

par :

yield from g

Lorsqu'un générateur terminait, cela se faisait via un return None. Maintenant, il est possible d'avoir une valeur de retour. Attention, celle ci ne fait pas partie des valeurs générées. Il faut plutôt la voir comme un status code. Ainsi, on peut écrire 

result = yield from g

Et écrire ceci dans un générateur :

return value

Équivant à ceci 

raise StopIteration(value)

Cette possibilité permet d'utiliser des générateurs comme des threads légers.

Environnement virtuel

Python 3.3 intègre un système de création d'environnement virtuel, qui peut être créé à l'aide de l'une de ces deux commandes :

python3 -m venv /path/to/new/virtual/environment
pyvenv /path/to/new/virtual/environment

Ou encore par du code en utilisant une fonction du module venv ou par une méthode de la classe EnvBuilder :

def create(env_dir, system_site_packages=False, clear=False, use_symlinks=False):
builder = EnvBuilder(
system_site_packages=system_site_packages,
clear=clear,
use_symlinks=use_symlinks)
builder.create(env_dir)

def create(self, env_dir):
env_dir = os.path.abspath(env_dir)
context = self.create_directories(env_dir)
self.create_configuration(context)
self.setup_python(context)
self.post_setup(context)

Noms qualifiés de fonctions ou classes

Python permet de déclarer des classes ou des fonctions à l'intérieur d'autres classes ou fonctions. Un nouvel attribut spécial permet de retrouver. il est nommé Nom qualifié :

>>> class C:
... def f(): pass
... class D:
... def g(): pass
...
>>> C.__qualname__
'C'
>>> C.f.__qualname__
'C.f'
>>> C.D.__qualname__
'C.D'
>>> C.D.g.__qualname__
'C.D.g'
>>> def f():
... def g(): pass
... return g
...
>>> f.__qualname__
'f'
>>> f().__qualname__
'f..g'

Module Time

Deux fonctions existent et restenr :

  • time.time()
  • time.sleep()

De nouvelles fonctions apparaissent :

  • time.clock()

De nouvelles fonctions apparaissent :

  • time.get_clock_info(name)
  • time.monotonic()
  • time.perf_counter()
  • time.process_time()

Optimisations

L'utilisation de chaînes de caractères se fait plus rapidement et avec moins de consommation mémoire grâce à une représentation plus flexible.

Le dictionnaire a été revu dans sa conception pour permettre le partage de clés, une amélioration de la consommation mémoire et de la rapidité d'exécution.

La hiérarchie des exceptions OS et IO a été revue en profondeur.

De manière à faciliter le portage de code de Python 2.x à Python 3.3, les chaînes de caractères peuvent de nouveau être préfixées par u. Actuellement, seul le préfixe r existe encore.

Le module décimal a été implémenté en C, avec un gain de vitesse de x80.

Intégration de disutils2

Intégration d'un nouveau module lzma qui supporte LZMA /XZ


Pour plus de détails...

Plus de détails peuvent être trouvés (en anglais) sur la page officielle : http://www.python.org/download/releases/3.3.0/

Mots-clés associés :
Spinner