Python (langage)
Un article de Wikipédia, l'encyclopédie libre.
Python | |
---|---|
Apparu en | 1990 |
Auteur | Guido van Rossum |
Développeurs | Python Software Foundation |
Dernière version | 2.5 (19 septembre 2006) |
Paradigmes | Objet, impératif, fonctionnel |
Typage | Fort, dynamique |
Influencé par | ABC, C, Haskell, Icon, Lisp, Modula-3, Perl, Smalltalk, Tcl |
A influencé | Ruby, Boo |
Implémentations | CPython, Jython, IronPython, PyPy |
Système d'exploitation | Multi-plate-forme |
Licences | Python Software Foundation License |
Site Web | http://www.python.org |
Python est un langage de programmation interprété, multi-paradigme. Il autorise la programmation impérative structurée, orientée objet, et fonctionnelle. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.
Le langage Python est placé sous une licence libre proche de la licence BSD[1] et fonctionne sur la plupart des plates-formes informatiques, des super-calculateurs aux ordinateurs centraux, de Linux à Unix en passant par Windows et MacOS, avec java ou encore .NET... Il est concu pour optimiser la productivité des programmeurs en offrant des outils de haut-niveau et une syntaxe simple à utiliser.
Sommaire |
[modifier] Histoire
[modifier] Python 1
Python a été créé au début des années 1990 par Guido van Rossum au CWI aux Pays-Bas en tant que successeur du langage ABC pouvant gérer les exceptions et s'interfacer avec le système d'exploitation Amoeba. Van Rossum est le principal auteur de Python, et son rôle de décideur central permanent de Python est reconnu avec humour par le titre de "Dictateur bienveillant à vie" ("Benevolent Dictator for Life", BDFL).
La dernière version sortie au CWI était Python 1.2. En 1995, Van Rossum continua son travail sur Python au CNRI à Reston, aux États-Unis, où il sortit plusieurs versions du logiciel. Python 1.6 fut la dernière version sortie au CNRI.
Après la sortie de Python 1.6, et après que Van Rossum quitta 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 afin de la rendre compatible avec la GPL. Python 1.6.1 est essentiellement le même que Python 1.6 avec quelques correctifs mineurs et la nouvelle licence compatible GPL.
[modifier] Python 2
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 la seule version sortie à BeOpen.com. Après cette version, Guido Van Rossum et les autres développeurs de PythonLabs rejoignirent Digital Creations.
Python 2.1 fut une version dérivée de Python 1.6.1, ainsi que 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 d'après l'Apache Software Foundation.
[modifier] Python 3
Un développement parallèle est en discussion pour Python 3.0. Cette nouvelle version cassera la compatibilité ascendante afin de réparer certains défauts perçus du langage. Guido van Rossum espère sortir une première version alpha en 2007.
[modifier] Caractéristique du langage
[modifier] Syntaxe
Python a été conçu pour être un langage lisible. Il vise à être visuellement épuré, et utilise des mots anglais fréquemment là où d'autres langages utilisent de la ponctuation, et possède également moins de constructions syntaxiques que de nombreux langages structurés tels que C, Perl, ou Pascal.
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 :
Fonction factorielle en C | Fonction factorielle en Python |
---|---|
int factorial(int x) { if (x == 0) return 1; else return x * factorial(x-1); } |
def factorial(x): if x == 0: return 1 else: return x * factorial(x-1) |
[modifier] Types de base
Les types de base en Python sont relativement complet 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 donc pas fixe et dépend de la capacité de la machine.float
est une approximation d'un nombre réelcomplex
est une approximation d'un nombre complexe (typiquement deuxfloats
)
- Les chaines de caractères
- L'objet
str
possède une multitude de méthodes de base pour remplacer des mots, éliminer les espaces blancs, séparer le texte en morceau, etc ...
- L'objet
- Les objets "itérables"
- Les objets
list
sont bien plus que de simple tableaux, car ils ne sont pas de taille fixée à l'avance et peuvent contenir dans un même instance des objets de types différents. - Les objets
n-uplet
(outuple
) sont une variation non mutable des listes
- Les objets
Les objets itérables sont parcourus à l'aide d'une boucle for
de la manière suivante :
for element in iterable: traiter(element)
- les objets de "hachage"
- L'objet
dict
est un dictionnaire qui relie un objetstr
(ou tout autre objet reductible) à n'importe quel objet Python.
- L'objet
Il est possible de dériver les classes des types de base pour créer ses propres types: UserDict, UserString (depuis la version 2.2)
[modifier] Programmation fonctionnelle
Python permet de programmer dans un style fonctionnel. Les compréhensions de listes sont disponibles. Par 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)]
De plus, les fonctions lambda sont disponibles:
add2=lambda x: x+2
s'ensuit alors add2(5)==7
. Les fonctions lambda peuvent être utilisées comme arguments dans des expressions fonctionnelles: filter(lambda x: x <5, une_liste)
retournera une liste constituée des éléments de une_liste inférieurs à 5. Le même résultat peut être obtenu avec [x for x in une_liste if x <5]
.
[modifier] Programmation objet
La modélisation objet est aussi très importante en Python : tout est objet que ce soit les types de bases, 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).
Une classe se définit avec le mot class
. Les classes Python supportent l'héritage multiple, il n'y a pas de polymorphisme exactement comme en C++/Java, mais on arrive à quelque chose de similaire à l'aide d'arguments optionnels. En python, l'attribut d'un objet désigne à la fois une variable membre ou une méthode. Il est possible de lire ou de modifier un attribut dynamiquement avec les fonctions :
getattr(objet, 'nom de l'attribut')
setattr(objet, 'nom de l'attribut', nouvel_attribut)
Exemple de deux classes simples :
class Personne: def __init__(self, nom, prenom): self.nom = nom self.prenom = prenom def afficher_nom(self) : print self.nom+' '+self.prenom
class Etudiant(Personne):
def __init__(self, classe, nom, prenom=''):
Personne.__init__(self, nom, prenom)
self.classe = classe
def afficher_statut(self):
Personne.afficher_nom(self)
print classe
[modifier] Générateurs
Le mot-clef yield utilisé dans une fonction permet de faire de cette fonction un générateur. L'appel de cette fonction renvoie un objet de type generator, qui peut être utilisé dans une boucle for, par exemple.
À chaque appel, le genérateur effectue son traitement jusqu'à rencontrer le mot-clé yield, renvoie la valeur de l'expression devant yield, et à l'appel suivant, reprend son déroulement juste après le yield. Par exemple pour calculer la suite de Fibonacci, on peut faire:
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
[modifier] Réflexivité
Grâce à un usage intensif des dictionnaires (sorte de table de hachage), Python permet d'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).
[modifier] Typage
Le typage n'est pas vérifié à la compilation. De ce fait, 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 chaine de caractères) au lieu de tenter silencieusement de la convertir en une forme qui a du sens.
[modifier] Bibliothèque standard
Python possède une grande bibliothèque standard, fournissant des outils convenant à de nombreuses tâches diverses. Les modules de la bibliothèque standard peuvent être augmentés avec des modules spécifiques écrits en C ou en Python.
La bibliothèque standard est particulièrement bien conçue pour écrire des applications utilisant Internet, avec un grand nombre 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 régulières sont également fournis. Python inclut également un framework de tests unitaire pour créer des suites de test exhaustives.
[modifier] Interfaces Graphiques
Python possède de plusieurs modules disponibles pour la création de logiciels avec un interface graphique. Le plus répandu est Tkinter, qui fait partie de la bibliothèque standard, et qui est donc installé avec Python. Ce module est convenable à beaucoup d'applications et peut être considéré comme suffisant dans la plupart des cas. Néanmoins, d'autres modules ont été créés pour pouvoir lier Python à d'autres bibliothèque logicielles ('toolkit'), pour davantage de fonctionnalités, pour une meilleure intégration avec le système 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 donc être obtenus séparément.
Les bibliothèque logicielles pour la création d'interfaces graphiques avec Python :
- Tkinter - Interface pour Tk
- wxPython - Python et wxWidgets
- PyGTK - Python et GTK+ (The GIMP Toolkit)
- PyQt - Python et Qt de Trolltech
- FxPy - Python et le FOX Toolkit
- Pmw - Python Mega-Widgets
[modifier] Adoption de Python
Python est utilisé dans de nombreux domaines dont
- l'industrie militaire,
- la monétique,
- les Technologies de l'information et de la communication,
- l'informatique scientifique (SciPy, matplotlib),
- l'informatique théorique (les possibilités de méta-programmation révolutionnent la réalisation des design pattern),
- les enseignements de sciences physiques (Vpython,Scipy),
- la bio-informatique (bioPython),
- les bibliothèques graphiques (Soya 3D, pyOpenGL, pyGame)
- les jeux (Civilization IV utilise Boost.Python).
- Le developpement Web: Zope, Django (framework)
Ainsi, de nombreuses sociétés[2] utilisent Python, que ce soit pour des développements internes ou des logiciels fournis au public:
- Microsoft
- Google avec son systeme Adwords (Guido van Rossum, le créateur de Python travaille depuis 2005 au sein de cette entreprise)
- Industrial Light & Magic
- Pixar
- United Space Alliance, l'entreprise principale chargée du soutient de la navette spatiale.
[modifier] Implémentations
Outre l'implémentation de référence, nommée CPython (car écrite en langage C), il existe d'autres systèmes implémentant le langage Python :
- Stackless Python, une version de CPython n'utilisant pas la pile d'appel du langage C
- Jython, un interpréteur Python pour machine virtuelle Java. Il a accès aux bibliothèques fournies avec l'environnement de développement Java.
- IronPython, un interpréteur / compilateur (expérimental) pour plateforme .Net / Mono
- PyPy un interpréteur Python écrit dans un sous-ensemble de Python compilable vers le C ou LLVM.
- un compilateur (expérimental) pour Parrot, la machine virtuelle de Perl 6.
- Movable Python (payant): Python sur une clef USB pour lancer des scripts sans installer Python
Ces autres implémentations ne bénéficient pas forcément de la totalité de la bibliothèque de fonctions écrites en C pour l'implémentation de référence.
[modifier] Plateformes supportées par CPython
Compatible UNIX |
OS bureautique |
embarqué ou spécifique
|
Autres |
[modifier] Historique
Version | Date de sortie | Nouveautés |
---|---|---|
3000 | (en développement) |
Voir la PEP 3100 pour les détails |
2.5 | 19 septembre 2006 |
|
2.4 | 30 novembre 2004 |
|
2.3 | 29 juillet 2003 | |
2.2 | 21 décembre 2001 |
|
2.1 | 17 avril 2001 |
|
2.0 | 16 octobre 2000 |
|
1.6 | 5 septembre 2000 |
|
1.5(.2) | 13 avril 1999 |
|
[modifier] Voir aussi
[modifier] Articles connexes
[modifier] Liens externes
- (en) Site officiel
- (fr) La catégorie Python de l'annuaire dmoz.
- (fr) Developpez.com, Un portail généraliste qui contient une section Python
[modifier] Notes et références
Portail de l'informatique – Accédez aux articles de Wikipédia concernant l’informatique. |