Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 / 2 vaut 1 en Python 2. Il fallait faire float(3) / 2 pour 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 / 2 vaut 1.5 maintenant. Il faut faire 3 // 2 pour faire la division euclidienne en Python 3.
  • range() maintenant est un objet itérable. Pareil pour dict.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.