Introduction à Python

Le monde fabuleux des langages de programmation est aujourd'hui très riche. Pour beaucoup, il se divise en langages de scripts et en langages d'applications. Les premiers permettent une écriture simple, sont interprétés et seraient destinés à des petites tâches de maintenance. Les seconds, compilés, plus complexes, seraient plus adaptés à produire de lourdes applications.

Python a été conçu comme un langage de script. Cependant, son implémentation multiparadigme lui permet d'être utilisé aussi bien pour les petites tâches de maintenance, que comme une réelle application lourde. Petit tour du propriétaire.

La présentation exhaustive de l'historique de Python existe un peu partout sur la toile (Wikipedia, Python.org). Mais voyons ici une présentation succincte. Python est un langage créé en 1989 au CWI par Guido Van Rossum, qui avait besoin d'un langage de script et qui n'en trouvait aucun correspondant à ses besoins. Python est inspiré de ABC, Modula 3, et du langage C. Lorsque Guido Van Rossum quitte le CNRI en 2000, Python alors en version 1.6.1 adopte une licence compatible avec la GPL. Depuis la version 2.1, Python est sous licence Python Software Foundation Licence, qui est dans les grandes lignes comparable à l'Apache Software Foundation Licence. Aujourd'hui, le développement de Python se poursuit sous la dictature bienveillante de Guido Van Rossum qui est depuis 2005 chez Google.

A la date de rédaction de cet article, la version stable de Python est, depuis 2006, la 2.5. Deux versions sont prévues incessamment sous peu :

  • Py3k (Python 3000 en fait Python 3.0) est programmé pour octobre 2008. py3k marque un tournant car il sera incompatible avec les versions précédentes du fait de la modification profonde de certains objets propres aux langages (chaînes, dictionnaires...). Py3K s'accompagne également d'une réorganisation de l'ensemble des bibliothèques standard.
  • Python 2.6, dont nous sommes depuis le 20 août 2008 à la Beta 3 (et dernière), est surtout destiné à permettre la transition en douceur entre le code 2.x et 3.0.

Enfin, notons que Python doit son nom aux Monthy Python, dont Guido Van Rossum était un grand fan de la série Flying Circus, et non au serpent du même nom, bien que ce dernier sorte mieux en logo.

Points d'intérêt du langage.

Python a été conçu comme un langage de script. Il est donc interprété et supporte un typage dynamique, bien qu'il soit fortement typé. Cependant, Python est avant tout un langage multiparadigme et permet aussi bien la programmation objet que fonctionnelle. Python bénéficie également d'une gestion dynamique de la mémoire à l'aide d'un mécanisme de comptage de références, il possède un système de gestion des exceptions, et est réflectif et introspectif. Python est également extensible grâce à la possibilité d'interfaçage avec des bibliothèques C. Enfin, si l'interpréteur officiel est écrit en C et le rend portable (aussi bien sous des systèmes Windows, MacOS, Linux/Unix que sous BeOS, Os2 voir des systèmes mainframe type os/400 ou z/OS), il existe diverses implémentations sous divers langages. Nous pourrons retenir Jython, implémentation en Java qui est capable par exemple d'interagir avec la bibliothèque fournie avec le SDK.

Enfin, Python trouve sa place dans des applications complexes. Son champ d'applications va donc du script (des outils de gestion de la distribution Ubuntu sont en Python) à l'application critique (Python est utilisé au contrôle de vol de la NASA) en passant par la mobilité (Nokia a ouvert sa plate forme pour permettre le développement d'applications en Python pour la série des N60, des plate-formes mobiles telles qu'OpenMoko permettent le développement d'applications en Python) ou le Web (avec le serveur d'application Zope ou le framework DJango).

Comment "faire du Python" ?

Python est fourni avec un interpréteur qui se présente comme une console dans laquelle il est possible d'exécuter des instructions Python. Cet environnement est pratique pour tester du code et explorer les instructions utilisées. Il est cependant préférable d'utiliser l'utilitaire iPython qui offre de nombreuses autres fonctionnalités.

Pour une utilisation et une réutilisation, il est évident que le code Python se situe dans des fichiers. Comme tous scripts originaires d'Unix, ceux ci doivent commencer par un sha-bang, et d'une ligne spécifiant l'encodage comme dans l'exemple ci-dessous.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

Syntaxe Python

Organisation des instructions

Python propose une manière originale pour écrire le code, dans le but de le rendre concis et lisible. Ainsi, du code Python s'écrit avec une instruction par ligne (bien qu'il soit possible d'en saisir plusieurs séparées par un point virgule) et les blocs sont délimités par l'indentation. Attention à ce sujet, en fonction des environnements, une série d'espaces (" ") ne sera pas équivalent à une tabulation ("/t"). Des outils comme le plug-in PyDev pour Eclipse gère les conversions.

Quelques types simples

Les types simples en Python sont assez communs avec les autres langages : entiers, décimaux, chaînes... Si le type sera déterminé dynamiquement, il faut savoir que Python gère deux types d'entiers : le type int et le type long. Le type int dépend de l'architecture donnée et sera le plus communément représenté sur 32 bits, taille d'un registre, ce qui permet une optimisation des calculs à base d'int. Le type long sera stocké en mémoire et ne sera ainsi limité que par la mémoire physique de l'ordinateur et donc virtuellement infini. Mais moins optimisé.

Les chaînes de caractères sont comparables à ce qui se trouve dans les autres langages. Il faut juste savoir qu'il s'agit d'un type immuable (non modifiable) mais accessible comme une liste (voir ci dessous).

Notons aussi que Python gère nativement des types tel que les complexes (z = x +iy).

Quelques types complexes...

...à ne pas confondre avec le type représentant les nombres complexes qui concluait la partie précédente.

Dans les types complexes, on va retenir les listes, les tuples et les dictionnaires.

Les listes sont une collection d'éléments. Il est possible d'accéder à ces éléments, d'en ajouter et d'en supprimer. Un élément peut être n'importe quel type supporté par Python. De plus, en Python, une liste est de type liste, c'est à dire qu'elle peut contenir des éléments de types différents.

Les accès à une liste peuvent se faire selon un indice ou une plage. L'exemple ci dessous crée une liste, affiche l'élément en indice 1, ajoute un élément en fin de liste, liste les éléments entre les indices 1 et 3, les éléments de l'indice 1 à la fin, utilise un indice négatif pour accéder à la liste à l'envers et le remplacement de plusieurs éléments.

>>maListe = ['java', 'python', 42]
>>maListe[1]
'python'
>>maListe.append(['asp', 'visual basic'])
>>maListe[1:3]
['python', 42]
>>maListe[1:]
['python', 42, ['asp', 'visual basic']]
>>maListe[-2]
42
>>maListe [1:3] = ['perl']
>>maListe
['java', 'perl', ['asp', 'visual basic']]

Les tuples sont un type particulier assimilable à une liste non modifiable. Les opérations pouvant être effectuées sont ainsi les mêmes que pour les listes excepté les opérations de modification.

Les dictionnaires sont des collections de couples clef:valeur. La clef doit être un élément de type non modifiable, ce qui peut être une valeur numérique, une chaîne de caractères, voir même un tuple si celui-ci n'est composé que d'éléments non modifiables (pas de liste par exemple).

>>monDico={'sun':'java', 'microsoft':['asp', 'visual basic']}
>>monDico['sun']
'java'

Les structures de contrôle

Les structures de contrôle peuvent paraître particulières à tout développeur C, Java, .Net. La structure conditionnelle est assez classique sous le format

i = 100
if i < 1000:
    print 'i est petit'
elif i == 1000:
    print 'i est tout juste bien'
else:
    print 'i est grand'

Il y a à côté, 2 structures de boucles, les boucles while et les boucles for. La boucle while est exécutée tant que la condition est vraie.

i = 1
while i < 1000:
    print 'i est toujours trop petit'
    i = i + 1

La boucle for par contre permet d'itérer sur une collection. Elle peut être aidée pour cela avec la fonction range(n) qui permet de générer une liste d'entier de 0 à n-1.

L'exemple suivant affiche les entiers de 0 à 9 :

for i in range(10):
    print i

L'exemple suivant, pour lequel monDico est défini, permet d'afficher les valeurs associées à toutes les clefs :

for i in monDico.keys():
    print monDico[i]

Une particularité avec les boucles est l'instruction else comme dans l'exemple ci-dessous :

for i in monDico.keys():
    print monDico[i]
else:
    print "C'est tout"

Dans un contexte de boucle, l'instruction contenue dans le else sera exécutée après l'exécution de la boucle sauf si une instruction break est exécutée lors des itérations.

Écriture de fonctions

Pour écrire une fonction en Python, il suffit de suivre le patron suivant :

def maFonction(mesParametres):
    """Mon docstring"""
    mes instructions

Si la structure est classique, un intérêt du langage Python est cette chaîne de caractères Mon docstring. Il s'agit là d'un docstring, comparable au commentaire javadoc en java. Il est possible d'accéder spécifiquement à cette information par l'instruction :

>>maFonction.__doc__
Mon docstring

Evidemment, de nombreux outils sont capables d'exploiter les informations contenus dans les docstrings.

En conclusion

Ce billet n'a pas la prétention d'être un cours complet sur Python. Cette première introduction est destinée à présenter un langage original qui est une réponse à l'opposition entre les langages de scripting et les langages compilés. De part ses origines, Python a une sémantique éloignée des langages utilisés dans l'informatique de gestion (Java, .Net, et même C/C++) mais offre des possibilités tout aussi puissantes qui seront développées dans des billets ultérieurs.

3 commentaires

  1. Sujet d’actualité ! J’en profite pour signaler que la prochaine réunion du Nantes JUG sera justement consacrée au « retour des langages de scripting » dont Python est un des représentant, avec PHP, Perl, Javacript, Groovy, Ruby, Erlang, …

    Pour les intéressés, rendez-vous le 9 octobre au Nantes Jug. La réunion aura lieu à 19h au sein de l’Ecole des Mines de Nantes.

    Inscription : http://jugevents.jugpadova.it/jugev

  2. Nice blog right here! Additionally your site lots up very fast! What web host are you the usage of? Can I get your associate hyperlink for your host? I want my site loaded up as fast as yours lol

  3. Nice blog right here! Additionally your site lots up very fast! What web host are you the usage of? Can I get your associate hyperlink for your host? I want my site loaded up as fast as yours lol

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.