Histoire de Python
Projet ABC
ABC est un langage conçu pour être simple et pour remplacer BASIC. Voir https://homepages.cwi.nl/~steven/abc/. Voici à quoi cela ressemblait :
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection
Création de Python
L’identation obligatoire, la simplicité c’est chouette. Mais ABC souffrait de limitations. C’est pourquoi Guido van Rossum crée Python fin 1989. Le nom est inspiré de Monty Python’s Flying Circus.
- Première version publique (0.9.0) février 1991
- Python 1.0 (1994), avec programmation fonctionnelle (map, reduce, filter de LISP)
- Python 2.0 (2000) : ramasse-miettes et Unicode, compréhension de listes qui vient de SETL (SET language) et Haskell
- 2001 : Python Software Foundation (PSF) est créée en 2001
Poème Zen de Python
En tapant import this, un poème, écrit par Tim Peters (aussi contributeur à CPython et créateur du timsort) apparait :
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.[c]
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.[d]
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let's do more of those!
Voici une traduction française (cf. wikipedia) :
Préfère :
la beauté à la laideur,
l'explicite à l'implicite,
le simple au complexe
et le complexe au compliqué,
le déroulé à l'imbriqué,
l'aéré au compact.
Prends en compte la lisibilité.
Les cas particuliers ne le sont jamais assez pour violer les règles.
Mais, à la pureté, privilégie l'aspect pratique.
Ne passe pas les erreurs sous silence,
... ou bâillonne-les explicitement.
Face à l'ambiguïté, à deviner ne te laisse pas aller.
Sache qu'il ne devrait [y] avoir qu'une et une seule façon de procéder,
même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais.
Mieux vaut maintenant que jamais.
Cependant jamais est souvent mieux qu'immédiatement.
Si l'implémentation s'explique difficilement, c'est une mauvaise idée.
Si l'implémentation s'explique aisément, c'est peut-être une bonne idée.
Les espaces de nommage ! Sacrée bonne idée ! Faisons plus de trucs comme ça.
Python 3.0
Est-ce qu’un langage doit garder la rétro-compatibilité ? Faut-il prendre le risque de faire une refonte et de changer drastiquement des aspects du langage ?
Pour Python, le choix a été de faire une refonte : Python 3.0. Ce choix a été porté par Guido van Rossum lui-même, le créateur et « dictateur bienveillant à vie » (BDFL - Benevolent Dictator for Life).
AVANT dans Python 2 :
-
les chaînes de caractères étaient des suites d’octets. Comme
char *en C… -
3 / 2vaut1en Python 2. Il fallait fairefloat(3) / 2pour avoir 1.5. C’était une source de bugs. Du pur bonheur ;) -
range()créait une liste. Par exemple,range(10000000)c’était…[0, 1, 2, 3, 4, 5, 6, ... , 9999999]
MAINTENANT dans Python 3 :
- Toutes les chaînes de caractères sont en Unicode
3 / 2vaut1.5maintenant. Il faut faire3 // 2pour faire la division euclidienne en Python 3.range()maintenant est un objet itérable. Pareil pourdict.keys(), dict.values(). D’un objet itérable, on peut créer un itérateur qui est une machine qui crée des choses :
Bibliothèques
Calcul numérique :
- NumPy (2006)
- Pandas (2008-2009)
- Scikit-learn (2010)
Web :
- Django (2005)
- Flask (2010)
- Requests (2011)
Apprentissage automatique :
- TensorFlow (2015)
- PyTorch (2016)
Les bibliothèques sont géré avec pip qui est le gestionnaire de paquets pour Python créé en 2008.
Résumé
Les Python Enhancement Proposals (PEP) sont des propositions d’amélioration du langage. Elles peuvent être acceptées ou rejetées.