Python

Python est un langage de programmation interprété multi- paradigme. Il facilite la programmation impérative structurée, et orientée objet.



Catégories :

Python - Langage impératif - Langage fonctionnel - Langage orienté objet - Langage de script - Bibliothèque Python

Recherche sur Google Images :


Source image : www.wildlife-pictures-online.com
Cette image est un résultat de recherche de Google Image. Elle est peut-être réduite par rapport à l'originale et/ou protégée par des droits d'auteur.

Page(s) en rapport avec ce sujet :

  • En Python nous appelons cela des méthodes [7]. Chaque objet d'une chaîne de caractères... sur le theme «Python est -il vraiment un langage orienté objet ?... (source : voidspace.org)
  • Une fonction, comme tout le reste en Python, est un objet..... Pour certain, cela veut dire que tout objet doit avoir des attributs et des méthodes, ... (source : diveintopython.adrahon)
  • Python est (optionnellement) multi-threadé. Python est orienté- objet.... modèle objets, et en reprenant la terminologie de C++, l'ensemble des méthodes sont ... (source : linux-center)
Apparu en 1990
Auteur Guido van Rossum
Développeurs Python Software Foundation
Dernière version
Paradigmes Objet, impératif
Typage Fort, dynamique
Influencé par ABC, C, Icon, Modula-3, Perl, Smalltalk, Tcl
A influencé Ruby, Boo
Implémentations CPython, Jython, IronPython, PyPy
Dispositif d'exploitation Multiplate-forme
Licence Python Software Foundation License
Site Web www. python. org

Python est un langage de programmation interprété multi-paradigme. Il facilite la programmation impérative structurée, et orientée objet. Il est pourvu d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un dispositif de gestion d'exceptions ; il est ainsi comparable à Perl, Ruby, Scheme, Smalltalk et Tcl.

Le langage Python est positionné sous une licence libre proche de la licence BSD[1] et fonctionne sur la majorité des plates-formes informatiques, des supercalculateurs aux ordinateurs centraux, de Windows à Unix en passant par Linux et MacOS, avec Java ou encore . NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Il est aussi apprécié par les pédagogues qui y trouvent un langage où la syntaxe clairement scindée des mécanismes de bas niveau, permet une initiation plus aisée aux concepts de base de la programmation. [2]

Utilisations

Python est un langage qui peut s'utiliser dans de nombreux contextes et s'adapter à tout type d'utilisation grâce à des bibliothèques spécialisées à chaque traitement. Il est cependant spécifiquement utilisé comme pour automatiser des tâches simples mais fastidieuses comme par exemple un script qui récupérerait la météo sur internet ou qui s'intégrerait dans un logiciel de conception assistée par ordinateur afin d'automatiser certains enchaînements d'actions répétitives. On l'utilise aussi comme langage de développement de prototype quand on a besoin d'une application fonctionnelle avant de l'optimiser avec un langage qui plus est bas niveau. Il est spécifiquement répandu dans le monde scientifique, et possède de nombreuses extensions destinées aux applications numériques.

Histoire

Guido van Rossum a participé au développement du langage de programmation ABC au Centrum voor Wiskunde en Informatica (CWI) aux Pays-Bas.

Au CWI

Il travaillait alors dans l'équipe du dispositif d'exploitation Amœba dont les appels dispositifs était difficilement interfaçables avec le bourne shell qui était utilisé comme interface utilisateur. Il estima tandis qu'un langage de script inspiré d'ABC pourrait être intéressant comme interpréteur de commandes pour Amœba[3]

En 1989, profitant d'une semaine de vacances durant les fêtes de Noël, il utilise son Macintosh personnel[4] pour écrire la première version du langage. Fan de la série télévisé des Monty Python, il décide de baptiser ce projet python. Il s'est essentiellement inspiré d'ABC, par exemple pour l'indentation comme syntaxe ou les types de haut niveau mais également de Modula-3 pour la gestion des exceptions, du langage C et des outils UNIX[5].

Durant l'année suivante le langage commence à être adopté par l'équipe du projet Amœba, Guido poursuivant son développement essentiellement pendant son temps libre. En février 1991 la première version publique, numérotée 0.9.0[6], est postée sur le forum Usenet alt. sources. La dernière version sortie au CWI était Python 1.2.

Au CNRI

En 1995, Van Rossum continua son travail sur Python au CNRI à Reston, aux États-Unis, où il sortit plusieurs versions du logiciel.

A partir d'août 1995, l'équipe python travaille au CNRI sur Grail[7] un navigateur internet utilisant Tk. Il est l'équivalent pour python du navigateur HotJava, permettant d'exécuter des applets dans un environnement sécurisé. La première version publique, disponible en novembre, est la 0.2[8]. Il a entraîné le développement de modules pour la librairie standard comme rexec[9], htmllib ou urllib[10]. La version 0.6 sera la dernière de Grail; elle est publiée en avril 1999[11].

En 1999, le projet Computer Programming for Everybody (CP4E) est lancé avec collaboration entre le CNRI et la DARPA. Il s'agit d'utiliser python comme langage d'enseignement de la programmation. Cette initiative conduira à la création de l'environnement de développement IDLE. Les subventions apportées par la DARPA ne suffisant pas à pérenniser le projet, Guido doit quitter le CNRI[12]. Python 1.6 fut la dernière version sortie au CNRI.

A BeOpen

Après la sortie de Python 1.6, et après que Van Rossum a quitté le CNRI pour travailler avec des développeurs de logiciels commerciaux, le CNRI et la Fondation pour le logiciel libre collaborèrent pour modifier la licence de Python pour la rendre compatible avec la GPL. Python 1.6.1 est principalement le même que Python 1.6 avec quelques correctifs mineurs et la nouvelle licence compatible GPL.

En 2000, l'équipe principale de développement de Python déménagea à BeOpen. com pour former l'équipe PythonLabs de BeOpen. Python 2.0 fut l'unique version sortie à BeOpen. com. Après cette version, Guido Van Rossum et les autres développeurs de PythonLabs rejoignirent Digital Creations.

Andrew M. Kuchling a publié en décembre 1999[13] un texte appelée python warts[14] qui synthétise les griefs les plus habituel exprimés à l'encontre du langage. Ce document aura une influence certaine sur les développements futurs du langage[15].

La Python Software Foundation

Python 2.1 fut une version dérivée de Python 1.6.1, mais aussi de Python 2.0. Sa licence fut renommée Python Software Foundation License. Tout code, documentation et spécifications ajouté, depuis la sortie de Python 2.1 alpha, est détenu par la Python Software Foundation (PSF), une association sans but lucratif fondée en 2001, modelée selon l'Apache Software Foundation.

Un développement parallèle, entamé en 2004, est en discussion pour Python 3.0. Cette nouvelle version cassera la compatibilité ascendante pour réparer certains défauts du langage (orientation objet avec deux types de classes, etc), et pour nettoyer la bibliothèque standard de ses éléments obsolètes et redondants. La première version alpha est sortie en septembre 2007.

Syntaxe

Python a été conçu pour être un langage lisible. Il vise à être visuellement épuré, et utilise des mots anglais souvent à l'endroit où d'autres langages utilisent de la ponctuation, et possède aussi moins de constructions syntaxiques que de nombreux langages structurés tels que C, Perl, ou Pascal. Les commentaires sont indiqués par le caractère dièse.

Les blocs sont identifiés par l'indentation, au lieu d'accolades comme en C/C++, ou de Begin... End comme en Pascal. Une augmentation de l'indentation marque le début d'un bloc, et une réduction de l'indentation marque la fin du bloc courant. Les parenthèses sont facultatives dans les structures de contrôle :

Fonction factorielle en C Fonction factorielle en Python
 // Fonction factorielle en C
 int factorielle(int x) {      
     if (x == 0)                    
         return 1;                   
     else
         return x * factorielle(x-1);
 }
 # Fonction factorielle en python
 def factorielle(x):
     if x == 0:
         return 1
     else:
         return x * factorielle(x-1)

Types de base

Les types de base en Python sont assez complets et puissants, il y a entre autres :

  • Les objets numériques
    • int est un entier classique.
    • long est un entier dont la mémoire de stockage est allouée dynamiquement, la taille maximale n'est par conséquent pas fixe et dépend de la capacité de la machine.
    • float est un flottant équivalent au double du C.
    • complex est une approximation d'un nombre complexe (typiquement deux floats)
  • Les objets "itérables"
    • Les objets list sont des tableaux dynamiques (ils étendent automatiquement leur taille quand indispensable) et acceptent des types de données hétérogènes.
    • Les objets set sont des ensembles non ordonnés d'objets.
    • Les objets dict sont des tableaux associatifs (ou dictionnaires) permettant d'associer un objet (une clef) à un autre.
    • Les objets str sont des chaînes de caractères, qui possèdent une grande variété de méthodes de base pour remplacer des mots, éliminer les espaces blancs, séparer le texte en morceau, etc. Ce sont des objets itérables car ils peuvent être vus comme des listes d'autres str d'un seul caractère.
    • Les tuple (ou n-uplet) sont une variante non mutable des listes ; de même il existe une version immutable des dictionnaires (frozendict) et des ensembles (frozenset).

Les objets itérables sont parcourus avec une boucle for de la manière suivante :

for element in objet_iterable:
  traiter(element)

Il est envisageable de dériver les classes des types de base pour créer ses propres types. On peut aussi fabriquer ses propres types d'objets itérables sans hériter des itérables de base en implémentant le protocole d'itération du langage.

Programmation fonctionnelle

Python sert à programmer dans un style fonctionnel. Les compréhensions de listes sont disponibles. A titre d'exemple, pour construire la liste des carrés des entiers naturels plus petits que 10, on peut utiliser l'expression :

 l = [x**2 for x in range(10)]
 # l = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

la liste des nombres pairs :

 l = [entier for entier in range(10) 
      if entier % 2 == 0]
 # l = [0, 2, 4, 6, 8]

Une forme limitée de fonctions lambda, ou fonctions anonymes, est disponible :

 lambda x: x+2

Les fonctions lambda peuvent être définies en ligne et utilisées comme arguments dans des expressions fonctionnelles : filter (lambda x : x < 5, une_liste) retournera une liste constituée des éléments d'une_liste inférieurs à 5. Le même résultat peut être obtenu avec [x for x in une_liste if x <5].

Les lambdas de Python n'admettent que des expressions et ne peuvent être utilisées comme fonctions anonymes généralisées ; mais en Python, l'ensemble des fonctions sont des objets, qui peuvent par conséquent être passés en arguments d'autres fonctions, et nommés quand indispensable.

Programmation objet

La programmation objet est particulièrement bien supportée par Python : l'ensemble des types de base, les fonctions, les instances de classes (les objets «classiques» des langages C++ et Java) et les classes elles-mêmes (qui sont des instances de méta-classes) sont des objets.

Une classe se définit avec le mot class. Les classes Python supportent l'héritage multiple ; il n'y a pas de surcharge statique comme en C++, mais le mécanisme des arguments optionnels et par mot-clef est plus général et plus flexible. En Python, l'attribut d'un objet peut référencer une variable d'instance ou de classe (le plus fréquemment une méthode). Il est envisageable de lire ou de modifier un attribut dynamiquement avec les fonctions :

  • getattr (objet, 'nom_attribut')
  • setattr (objet, 'nom_attribut', nouvel_attribut)

Exemple de deux classes simples :

 class Personne:
    def __init__(self, nom, prenom):
        self.nom = nom
        self.prenom = prenom
    def presenter(self) :
        return self.nom+' '+self.prenom
 
 class Etudiant(Personne):
    def __init__(self, classe, nom, prenom):
        Personne.__init__(self, nom, prenom)
        self.classe = classe
    def presenter(self):
        return self.classe + Personne.presenter(self)
 
 e = Etudiant('Licence INFO', 'Dupontel', 'Albert')
 assert e.nom == 'Dupontel'

Méthodes spéciales et surcharge des opérateurs

Python apporte un mécanisme élégant et orienté objet pour la surcharge des opérateurs : tout objet python peut se voir doter de méthodes dites spéciales.

Ces méthodes, commençant et finissant par deux underscores, sont nommées lors de l'utilisation d'un opérateur sur l'objet : + (méthode __add__), += (méthode __iadd__), [] (méthode __getitem__), () (méthode __call__), ... Des méthodes comme __repr__ et __str__, permettent de définir la représentation d'un objet dans l'interpréteur interactif et son rendu avec le mot clé print.

Les possibilités sont nombreuses et sont décrites dans la documentation du langage : http ://docs. python. org/ref/specialnames. html.

Par exemple on peut définir l'addition de deux vecteurs à 2 dimensions avec la classe suivante :

class Vector2D:
    def __init__(self, x, y):
        # On utilise un tuple pour stocker les coordonnées
        self.coords = (x, y)
 
    def __add__(self, other):
        # L'instruction a+b sera résolue comme a.__add__(b)
        # On construit un objet Vector2D à partir des coordonnée propres à l'objet et de l'autre opérande
        return Vector2D(self.coords[0]+other.coords[0], self.coords[1]+other.coords[1])
 
    def __repr__(self):
        # L'affichage de l'objet dans l'interpréteur
        return "Vector2D(%s, %s)" %self.coords
 
>>> a = Vector2D(1, 2)
>>> b = Vector2D(3, 4)
>>> print a+b
Vector2D(4, 6)

Générateurs

Le mot-clef yield utilisé dans une fonction sert à faire de cette fonction un générateur. L'appel de cette fonction renvoie un objet de type generator, qui est parfois utilisé dans une boucle for, par exemple.

À chaque appel, le générateur effectue son traitement jusqu'à rencontrer le mot-clé yield, renvoie la valeur de l'expression devant yield, ainsi qu'à l'appel suivant, reprend son déroulement juste après le yield. Par exemple pour calculer la suite de Fibonacci, on peut faire :

import sys
def gen_fibonacci(max=sys.maxint):
    a=0
    b=1
    while a<max:
        yield a
        a,b = b,a+b
for n in gen_fibonacci(1000):
    print n

Réflexivité

Grâce à un usage intensif des dictionnaires (conteneur associatif implémenté avec des tables de hachage), Python permet d'explorer les divers objets du langage (introspection) et occasionnellementde les modifier (intercession).

Typage

Le typage n'est pas vérifié à la compilation. Par conséquent, des opérations sur un objet peuvent échouer, signifiant que l'objet en question n'est pas du bon type. Malgré l'absence de typage statique, Python est fortement typé, interdisant des opérations ayant peu de sens (comme, par exemple, additionner un nombre à une chaîne de caractères) au lieu de tenter silencieusement de la convertir en une forme qui a du sens. Python propose des fonctions servant à transformer les variables dans un autre type :

points = 3.2 # points est du type float
print "Tu as " + points + " points !" # Génère une erreur de typage
points = int(points) # points est maintenant du type int (et vaut 3)
print "Tu as " + points + " points !" # Génère une erreur de typage
points = str(points) # points est maintenant du type str (chaîne de caractères)
print "Tu as " + points + " points !" # Plus d'erreur de typage, affiche 'Tu as 3 points !'

De même, chaque variable devra être déclarée avant d'être utilisée.

Python propose aussi un mécanisme de typage fort grâce à l'API trait ou au design pattern decorators.

Compilation

Il est cependant envisageable d'effectuer une analyse statique des modules Python avec des outils comme Pylint ou PyChecker. Ceux-ci éliminent la majorité des fautes, comme une classe qui hérite d'une classe abstraite et qui ne surcharge pas les méthodes abstraites, ou bien des variables utilisées avant d'être déclarées, ou encore des attributs d'instance déclarés en dehors de la méthode __init__, etc. Selon la nature du projet, ces outils peuvent être réglés de façon fine afin d'obtenir une très grande qualité de code.

Il est aussi envisageable de générer un Bytecode Python.

Des outils comme PyInstaller[16] ou d'autres plus spécifiques comme Freeze sous Unix et py2exe sous Windows permettent de «compiler» un programme Python sous forme d'un exécutable comprenant le programme et un interpréteur Python. Le programme ne tourne pas plus rapidement (il n'est pas compilé sous forme de code machine) mais cela simplifie beaucoup sa distribution, surtout sur des machines où l'interpréteur python n'est pas installé.

Modèle objet

En python tout est objet, dans le sens qu'une variable peut contenir une référence vers l'ensemble des éléments manipulés par le langage : nombres, méthodes, modules, etc. [17] Néanmoins, avant la version 2.2, les classes et les instances de classes étaient un type d'objet spécifique, ce qui signifiait qu'il était par exemple impossible de dériver sa propre sous-classe de l'objet list.

Méthodes

Le modèle objet de python est inspiré de celui de Modula-3[18]. Parmi ces emprunts se trouve l'obligation de déclarer l'instance de l'objet courant, conventionnellement appelée self, comme premier argument des méthodes, ainsi qu'à chaque fois qu'on souhaite accéder à une donnée de cette instance dans le corps de cette méthode. Cette pratique n'est pas naturelle pour des programmeurs venant par exemple de C++ ou Java, la profusion des self étant fréquemment critiquée comme étant une pollution visuelle qui gène la lecture du code. Les promoteurs du self explicite estiment au contraire qu'il évite le recours à des conventions de nommage pour les données membres et qu'il simplifie des tâches comme l'appel à une méthode de la superclasse ou la résolution d'homonymie entre données membres[19]. Il permet d'autre part un traitement orthogonal des méthodes et fonctions.

Python reconnaît trois types de méthodes :

  • les méthodes d'instances, qui sont celles définies par défaut. Elle reçoivent comme premier argument une instance de la classe où elles ont été définies.
  • les méthodes de classes, qui reçoivent comme premier argument la classe où elles ont été définie. Elles peuvent être nommées depuis une instance ou directement depuis la classe. Elles permettent de définir des constructeurs alternatifs comme la méthode fromkeys () de l'objet dict.
  • les méthodes statiques, qui ne reçoivent pas de premier argument implicite. Elles sont identiques aux méthodes statiques qu'on trouve en Java ou C++.

Visibilité

Le langage a un support particulièrement limité de l'encapsulation. Il n'y a pas, comme en java par exemple, de contrôle de l'accessibilité par des mots clefs comme protected ou private.

La philosophie de python est de différencier conceptuellement l'encapsulation du masquage d'information. Le masquage d'information vise à prévenir les utilisations frauduleuses, c'est une préoccupation de sécurité informatique. Le module bastion de la librairie standard, qui n'est plus tenu dans les dernières versions du langage, permettait ainsi de contrôler l'accès aux attributs d'un objet dans le cadre d'un environnement d'exécution restreint.

L'encapsulation est une problématique de développement logiciel. Le slogan des développeurs python est we're all consenting adults here[20] (nous sommes entre adultes consentants). Ils estiment en effet qu'il suffit d'indiquer, par des conventions d'écriture, les parties publiques des interfaces et que c'est aux utilisateurs des objets de se conformer à ces conventions ou de prendre leurs responsabilités. L'usage est de préfixer par un underscore les membres privés. Le langage permet d'autre part d'utiliser un double underscore pour éviter les collisions de noms, en préfixant automatiquement le nom de la donnée par celui de la classe où elle est définie.

L'utilisation de la fonction property () sert à définir des propriétés qui ont pour but d'intercepter, avec méthodes, les accès à une donnée membre. Cela rend inutile la définition systématiques d'accesseurs et le masquage des données comme il est courant de le faire en C++ par exemple.

Héritage

Python supporte l'héritage multiple. Depuis la version 2.3, il utilise l'algorithme C3, issu du langage Dylan [21], pour résoudre l'ordre de résolution de méthode (MRO]). Les versions précédentes utilisaient un algorithme de parcours en profondeur qui posait des problèmes dans le cas d'un héritage en diamant [22].

Bibliothèque standard

Python est apporté «Piles Incluses».

Python possède une grande bibliothèque standard, fournissant des outils convenant à de nombreuses tâches diverses. Le nombre modules de la bibliothèque standard peut être augmenté avec des modules spécifiques rédigés en C ou en Python.

La bibliothèque standard est spécifiquement bien conçue pour écrire des applications utilisant Internet, avec la plupart de formats et de protocoles standards gérés (tels que MIME et HTTP). Des modules pour créer des interfaces graphiques et manipuler des expressions rationnelles sont aussi apportés. Python inclut aussi un framework de tests unitaire pour créer des suites de test exhaustives.

Interfaces graphiques

Python possède plusieurs modules disponibles pour la création de logiciels avec une interface graphique. Le plus commun est Tkinter, qui est membre de la bibliothèque standard, et qui est par conséquent installé avec Python. Ce module convient à énormément d'applications et peut être reconnu comme suffisant dans la majorité des cas. Néanmoins, d'autres modules ont été créés pour pouvoir lier Python à d'autres bibliothèques logicielles ('toolkit'), pour davantage de fonctionnalités, pour une meilleure intégration avec le dispositif d'exploitation utilisé, ou simplement pour pouvoir utiliser Python avec sa bibliothèque préférée. Aussi, il faut dire que certains programmeurs trouvent l'utilisation de Tkinter plus pénible que d'autres bibliothèques. Ces autres modules ne font pas partie de la bibliothèque standard et doivent par conséquent être obtenus scindément.

Les principaux modules donnant accès aux bibliothèques d'interface graphique sont Tkinter pour Tk, wxPython pour wxWidgets, PyGTK pour GTK+, PyQt pour Qt, FxPy pour le FOX Toolkit, et Pmw pour Mega-Widgets, il existe aussi une implantation de SDL : Pygame, et un binding de la SFML : PySFML.

La communauté Python

Van Rossum est le principal auteur de Python, et son rôle de décideur central permanent de Python s'est vu consacré avec humour par le titre de «Dictateur bienveillant à vie» (Benevolent Dictator for Life, BDFL).

Il est assisté d'une équipe de core developers qui ont un accès en rédigéure au dépôt de CPython et qui se coordonnent sur la liste de diffusion python-dev. Ils travaillent essentiellement sur le langage et la bibliothèque de base. Ils reçoivent ponctuellement les contributions d'autres développeurs Python via la plateforme de gestion de bug SourceForge.

Les utilisateurs ou développeurs de bibliothèques tierces utilisent diverses autres ressources. Le principal média généraliste autour de python est le forum Usenet anglais comp. lang. python.

Les allusions aux Monty Python sont assez habituelles. Les didacticiels consacrés à python utilisent fréquemment les mots spam et eggs comme variable métasyntaxique. C'est une référence à l'épisode 25 de la seconde saison du Monty Python's Flying Circus, ou deux clients tentent de commander un repas avec une carte qui contient du jambon en conserve (le spam) dans quasiment l'ensemble des plats. Ce sketch a été aussi pris pour référence pour désigner un email non sollicité.

Adoption de Python

Plusieurs entreprises mentionnent sur leur site officiel[23] qu'elles utilisent Python :

Implémentations

Outre l'implémentation de référence, appelée CPython (car rédigée en langage C), il existe d'autres dispositifs implémentant le langage Python :

Ces autres implémentations ne bénéficient pas nécessairement de la totalité de la bibliothèque de fonctions rédigées en C pour l'implémentation de référence.

Historique des versions

Version Date de sortie Nouveautés
1.5 (. 2) 13 avril 1999
  • Ajout du mot clé assert
  • Possibilité d'importer une hierarchie de modules (import spam. ham. eggs)
  • Nouveau module re qui remplace regex
  • Les exceptions sont désormais des classes
  • Ajout de l'option -O qui supprime les assertions et informations de ligne de fichier
1.6 5 septembre 2000
  • La méthode append () des listes n'accepte plus qu'un seul argument
  • Le résultat des fonctions str () et repr () est désormais bien plus fréquemment différent, exemple : str (1L) =='1'et repr (1L) =='1L'
  • Les chaînes de caractères ont désormais des méthodes (" abc ". strip () )
  • Le module re est compatible avec l'ancien moteur, est plus rapide, et accepte les chaînes Unicode
  • Ajout du module distutils
  • Nouveau prototype "def f (*args, **kw) " pour les fonctions, avant il fallait utiliser apply ()
  • int () et long () acceptent désormais une base en second argument
  • L'opérateur in peut être surchagé avec une méthode __contains__ ()
2.0 16 octobre 2000
  • Changement majeur : support d'Unicode
  • Ajout des compréhensions de liste (List Comprehensions)
  • Ajouts des opérateurs avec assignement (a+=b, a*=b, etc. )
  • Les chaînes str ont désormais des méthodes
  • Nouveau ramasse-miettes à cycles
  • Nouveau prototype "def f (*args, **kw) " pour les fonctions, avant il fallait utiliser apply ()
  • Ajout des modules distutils, xml. dom. minidom module et xml. sax
2.1 17 avril 2001
2.2 21 décembre 2001
  • Unification de Type et de Class : on peut désormais hériter des types de base
  • Ajout des itérateurs et générateurs
  • Nouvel opérateur a // b pour la division entière
2.3 29 juillet 2003
  • Ajout des fonctions enumerate () et sum ()
  • Le type bool est désormais vraiment différent d'un entier
  • Énormément d'améliorations du support Unicode
2.4 30 novembre 2004
  • Ajout des décorateurs de fonction/méthode (@decorateur)
  • Conversion automatique d'un entier court en entier long si le résultat d'une opération est trop grand
  • Expressions de générateur retournant les résultats l'un après l'autre et non pas sous forme d'une liste, exemple : sum (x for x in xrange (10000) )
  • Ajout des fonctions reversed () et sorted ()
  • La fonction sort () accepte les mots clés cmp, key et reverse
  • Création du module decimal et du routeur
2.5 19 septembre 2006
  • Ajout de l'opérateur with
  • Ajout des méthodes send (), throw () et close () aux générateurs
  • Expression conditionnelle (a if test else b)
  • Les imports de module peuvent être relatifs
  • Ajout des méthodes partition () et rpartition () aux chaînes str et unicode
  • Ajout des fonctions any () et all ()
  • Intégration des bibliothèques ctypes, ElementTree, hashlib, sqlite3 et wsgiref
2.6 1er octobre 2008
  • Nouvelle syntaxe de formatage de chaines de caractères
  • Classes de bases abstraites
  • Décorateurs de classes
  • Modules json, multiprocessing, contextmanager et fractions
  • Amélioration de la compatibilité avec Python 3
3.0 3 décembre 2008[25]
  • Fusion des types'int'et'long'
  • Les chaînes sont en Unicode par défaut, 'bytes'remplace l'ancien type'str'
  • Utilise des itérateurs plutôt que des listes à l'endroit où c'est approprié (ex : dict. keys () )
  • a/b est la vraie division par défaut
  • exec et print deviennent des fonctions
  • None et as deviennent des mots clé
  • Le fichier __init__. py n'est plus indispensable pour les modules Python
  • `x`, l'opérateur <>, et la méthode find () des chaînes disparaissent
  • De nombreuses fonctions disparaissent : apply (), buffer (), callable (), ...
  • map () et filter () disparaissent au profit des compréhensions de liste
  • reduce () disparaît au profit des boucles explicites

Voir la PEP 3100 pour les détails

Les PEP

Les Proposition d'Amélioration de Python (ou "PEP", Python Enhancement Proposal) sont des documents textuels qui ont pour objet d'être la voie d'amélioration de Python et de précéder à toutes ses modifications ultérieures. Un pep est une proposition d'orientation pour le développement (process PEP), une proposition technique (Standard Track PEP) ou une simple recommandation (Informational PEP, la plus célèbre étant sans doute celle de Tim Peters : http ://www. python. org/dev/peps/pep-0020/). À leur sortie, les PEPs sont relus et commentés par le BDFL[26].

Python 3000

Il existe des plans pour une future version, nommée Python 3.0 (le projet est nommé "Python 3000" ou "Py3K") qui, à terme, abolira la compatibilité descendante avec la série des versions 2. x, dans l'objectif d'éliminer les faiblesses actuelles du langage. La ligne de conduite est de "diminuer la redondance dans le fonctionnement de python par la suppression des méthodes obsolètes". Il n'y a pas de version définitive pour Python 3.0, mais Python 3.0a1, la première version alpha, a été publiée le 31 août 2007[27], et il existe un PEP[28] qui détaille les changements prévus.

Philosophie

Python 3.0 a été développé avec la même philosophie que dans ses versions antérieures, par conséquent toute référence à la philosophie de Python s'appliquera autant à la version 3.0. Comme toujours, Python a accumulé énormément de nouvelles méthodes qui font en fait acte de redondance avec d'autres préexistantes. Python 3.0, en recherchant la suppression du code redondant et des modules identiques, suit la grande directive philosophique de Python "Il ne devrait subsister qu'une seule méthode, qui soit à la fois optimale et naturelle pour chaque chose".

En dépit de cela, Python 3.0 restera un langage multi-paradigme. Les programmeurs auront toujours le choix entre l'orientation objet, la programmation structurée, la programmation fonctionnelle, et l'aspect orienté-objet, et d'autres paradigmes ; en dépit du choix existant, Python 3.0 a cependant pour but d'être utilisé de manière plus naturelle que dans les versions 2. x.

Planning et compatibilité

Python 3.0a1, la première version alpha de Python 3.0, a été publiée le 31 août 2007. Les version 2. x et 3. x de Python seront publiées en parallèle pendant plusieurs cycles de développement, pendant lesquels la série des 2. x subsistera essentiellement pour la compatibilité, en incluant quelques caractéristiques importées depuis Python 2.3. Le PEP 3000 contient plus d'informations à propos du processus de publication d'une version.

Comme Perl 6, Python 3.0 va rompre la compatibilité descendante (rétro-compatibilité). L'utilisation de code rédigé pour les séries 2. x n'est pas garanti avec Python 3.0. Il y aura des changements fondamentaux, comme le passage généralisé à l'unicode pour les chaînes de caractères. Le typage dynamique associé à certaines méthodes sur les objets de type dictionnaire font qu'une transition idéale de Python 2. x vers Python 3.0 est particulièrement complexe. Comme toujours, un outil appelé "2to3" sera censé réaliser la plus grande part du travail de traduction, en indiquant les zones de codes sujettes à caution par des commentaires spéciaux et des Warnings. Qui plus est , dans sa pré-version, 2to3 semble réussir franchement à réaliser une traduction correcte. [29] Dans le cadre d'une migration de python 2. x vers Python 3. x, le PEP 3000 recommande de conserver le code original comme base des modifications et de le traduire pour la plateforme 3. x en utilisant 2to3.

Python 2.6 devra apporter des caractéristiques de compatibilité ascendante, autant qu'un mode "Warnings" qui devrait faire prendre conscience des problèmes potentiels de transition pour le passage à Python 3.0. (voir PEP 361 pour plus d'informations. )

Notes et références

Liens externes

Recherche sur Amazone (livres) :




Ce texte est issu de l'encyclopédie Wikipedia. Vous pouvez consulter sa version originale dans cette encyclopédie à l'adresse http://fr.wikipedia.org/wiki/Python_(langage).
Voir la liste des contributeurs.
La version présentée ici à été extraite depuis cette source le 17/03/2009.
Ce texte est disponible sous les termes de la licence de documentation libre GNU (GFDL).
La liste des définitions proposées en tête de page est une sélection parmi les résultats obtenus à l'aide de la commande "define:" de Google.
Cette page fait partie du projet Wikibis.
Accueil Recherche Aller au contenuDébut page
ContactContact ImprimerImprimer liens d'évitement et raccourcis clavierAccessibilité
Aller au menu