Python 3, Python 3000 ou py3k
Victor Stinner - Pycon FR 2008
- Corriger les défauts de jeunesse de Python
- Python version 2.0 sorti il y a 8 ans
- Limiter les erreurs du développeur
- PEP 3101: Advanced String Formatting
- PEP 3119: Abstract Base Classes
- PEP 3129: Class Decorators
- PEP 3131: Non-ASCII Identifiers
- ...
- Fonctions apply(), callable(), buffer(), xrange(), coerce(), ...
- Le type long devient le type int
- Disparition de l'ancien style de classe
- a <> b => a != b
- `objet` => repr(objet)
- dict.has_key() => key in dict
- list.sort(cmp=...) => list.sort(key=...)
- zip(...), range(10), map(), filter(), dict.values()
- list(range(3)) donne [0, 1, 2]
- Gain de performances
- Respect de la PEP 8
- BaseHTTPServer => http.server
- _winreg => winreg
- Modules désuets : sets, md5, whatsound, ...
- Octet : nombre entre 0 et 255
- Caractère : chiffre, lettre, ponctuation, ...
- Unicode : milliers de caractères
- ISO-8859-1 et UTF-8 : sérialisation
- str/unicode => bytes/str
- "abc"[0] == 'a' ; b"abc"[0] == 97
- b"abc"[0:1] == b"a"
- bytes perd méthodes isalpha(), upper(), decode()
- Indiquer les types
- def str_repeat(x: int, y: str) -> str: ...
- Python n'utilise pas ces informations
- Outils d'analyse statique
def affiche(prix, monnaie=u"€", nom=""): if nom: print "%s: %s %s" % (nom, prix, monnaie) else: print "%s %s" % (prix, monnaie) affiche(14500, "Voiture")
def affiche(prix, *, monnaie="€", nom=""): if nom: print ("%s: %s %s" % (nom, prix, monnaie)) else: print ("%s %s" % (prix, monnaie)) affiche(14500, nom="Voiture")
- Abstract Base Classes (ABC)
- Similaire aux interfaces
- Hashable, Sized, MutableSet, Sequence, ...
- Utilisation : isinstance(arg, Mapping)
- ABC pour les nombres
- Number > Real > Rational > Integral
- Complex et Exact/Inexact
- __trunc__(), __floor__(), __ceil__(), __round__()
- API générique
- E/S RAW : bytes ; readable(), seekable(), __enter__()
- E/S tamporisée : cache lecture et écriture
- E/S texte : read() -> str, seek(obj), retour à la ligne universel
- E/S non blocante : read() -> None, write() -> 0
- BytesIO et StringIO
- format(10.0, "1.2f")
- "{1} {0}".format('Stinner', 'Victor')
- "{info[nom]}".format(info={'nom': 'Victor'})
- "{nom:20}".format(nom='Victor')
- "{nom:{1}}".format(nom='Victor', 20)
- "{0!r}".format("Hello")
- Python 2.6
- Outil 2to3
- Avertissements
- Symboles Unicode
- Décorateurs de classe
- Nouveautés trop nombreuses !
- 3.0a5 publiée le 8 mai dernier
- Changements majeurs terminés
- Travail sur la bibliothèques standard
- Version finale pour septembre
- Questions ?
- Il n'y pas de mauvaise question
- Le ridicule ne tue pas
- ... quoique
- Écrite en texte plat, format reST
- Convertie en présentation S5 (HTML) avec rst2s5
- Thème d'Olivier Grisel
- Photo du missile pas du tout libre...