Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le oct. 7, 2008 Temps de lecture: 13 min

Me suivre sur Mastodon

Didacticiel Python Part 1

Je me suis développé un petit outil de load-balancing en Python il y a quelques jours, et je m’empresserai de vous le donner sitôt qu’il sera présentatble. Le choix de le développer en Python s’est porté sur le fait que ce langage est simple, pratique, puissant et surtout complet.

Je me suis dis que ce serait sympathique de laisser un petit didacticiel sur ce langage. D’autant que des frameworks commencent à faire leur apparition comme Django. Il est donc logique de commencer à reparler de ce langage que j’affectionne particulièrement.

Avant tout, qu’est-ce que Python ? Python est un langage de script pseudo-compilé, libre et multiplateforme. Il permet de développer à peu près tout et n’importe quoi. Très pédagogique, il peut être un très bon point de départ pour ceux qui veulent apprendre à développer des petits programmes, des utilitaires ou carrément une véritable application complexe.

Python s’approche de Java, il existe d’ailleurs un moyen de coupler Java et Python: Jython. Le principe de Python est de travailler avec des objets et des modules tout comme le fait Java. Mais à l’inverse de Java, Python n’utilise pas de machine virtuelle, il est interprété puis pré-compilé sur la machine cible.

Un aspect important à bien prendre en compte est qu’un script Python ne ressemble pas beaucoup aux autres langages. Ce peut être un point faible comme un point fort. En effet, les blocs ne sont pas définis entre accolades comme beaucoup d’autres langages, mais via l’indentation.

Cette règle d’indentation est autant un point fort qu’un point faible: -point fort puisque cela vous force à coder proprement, et si vous allez vers d’autres langages vous aurez alors pris de bonne habitudes. Le code reste logique à lire et lisible -point faible parce que cela peut devenir contraignant si vous avez une profondeur de code conséquente cela peut devenir difficile à lire. Il se peut aussi que pour un simple espace manqué votre code refuse de s’exécuter.

Autre chose, vous le verrez, les méthodes de classes **doivent** récupérer le pointeur de classe (self et non this) en paramètre. Et pour finir, les syntaxes d’encapsulation et d’héritages sont noté très différemment par rapport à PHP, Java ou C++.

Comme PHP, Python ne demande pas de “typer” une variable.

Python s’approche aussi beaucoup de Perl. Même si la syntaxe Python est moins permissive, vous verrez que des concepts simplificateurs vont vous permettre de coder, vite, très vite même. Il y a même des choses qui viennent pas à l’idée, parce qu’on est rarement habitué à ce que ce soit si simple… vous verrez.

Donc si vous êtes novice, notez que nous ne codons pas exactement de la même manière en Python et en un autre langage, mais que vous n’aurez pas trop de mal à voir les différences.

Et si vous n’êtes pas novice en développement, vous allez parfois vous gratter la tête pour trouver la syntaxe à utiliser puisqu’elle diffère pas mal du langage d’où vous venez.

Ces points étant dit, nous pouvons commencer. A partir de maintenant, j’imagine que python est installé sur votre PC et que vous savez ouvrir un éditeur de texte, un terminal (console) et que vous avez quelques notions d’algorithmie.

    • IMPORTANT** dut au fait que python est souvent compilé en mode “unicode”, il faut déclarer à python quel encoding vous utilisez. Sous Linux, l’encoding est généralement utf-8. Il suffira de placer cette ligne en début de code dans vos script:
# -*- coding: utf-8 -*-
    • Notez bien ceci, cela va vous éviter de hurler de douleur devant des erreurs envoyées par Python sans que vous les compreniez**

L’interpréteur

Comme je vous l’ai dit, Python est interprété. Cela veut dire que le code en lui même ne peut pas devenir un exécutable natif (du moins pas naturellement, il existe des méthodes…) mais qu’il faut utiliser l’interpréteur Python.

L’interpréteur est invoqué depuis la console, généralement la commande s’apelle python. Ouvrez un terminal et tapez justement python:

pypatrice@patrice-desktop:~$ python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Vous voilà dans l’interpréteur. Si vous voulez quitter, il suffit de presser CTRL+D.

Ici vous pouvez taper du code python qui sera interprété directement, cela pourra vous permettre de tester des syntaxes, des fonctions, mais surtout **n’espérez pas coder un script complexe dans cet outil**, ce serait une torture sans nom.

Mais pour l’heure, utilisons ce terminal pour tester les bases.

Les commandes de base

Il existe un grand nombre de fonctions de base sous Python, en utilisant l’invite de commande python, comme vu ci dessus, essayez ces commandes. Pour valider une commande, il suffit de presser la touche “Entrée” `

print “Hello” Hello print 2+4 6 `

Vous l’avez deviné print sert à afficher quelque chose sur la sortie standard.

Variables objet

En python, quasiment tout est objet. Vous verrez donc que n’importe quelle variable se manipule en tant que telle.

Il existe différents types d’objet, mais commençons par les plus simples: -boolean ou booléen, Vrai ou Faux (True False) -None ou valeur nulle, attention ce n’est pas zéro ! -string qui est une chaîne de caractère -int qui est un nombre entier -float nombre à virgule flottante

Pour définir une variable d’un type ou d’un autre, il suffit en fait de l’instancier une fois avec le contenu type… En fait, voici comment cela se passe:

#créer une chaîne:
s = ""
#ou bien 
s="Hello"

#créer un entier, puis un float
i = 1
f = 1.2

Chacun des ces objet a un nombre de méthodes conséquent. Prenons un exemple. Nous allons créer une chaîne de caractère (string) puis demander à la passer en majuscule: `

a = “Hello the world !!!” print a.upper() HELLO THE WORLD !!! `

Evidamment, nous ponvons la passer en minuscule:

>>> print a.lower()
hello the world !

Comme les méthodes lower et upper renvoient des chaînes de caractères, nous pouvons chaîner les appels, vous allez voir c’est assez sympathique: `

print a.upper().lower().lower().upper() HELLO THE WORLD !!! `

Python permet d’appeler des variables anonymement. En fait, ici nous avons déclaré une variable ‘a’ qui contient ‘Hello the world !!!’, mais nous pourrions ne pas utiliser une variable: `

print “Hello the world”.upper() HELLO THE WORLD ` Voilà justement l’une des technique qui ne vient par à l’esprit tout de suite. Mais Python est justement pourvu de ce genre de méthodes qui nous rappelle un peu ce que nous pouvons faire en Perl. Clairement, ici, je demande de mettre une chaîne en majscule, pourquoi serions nous obligé de la déclarer ? Aucune raison.

Nous avons vu les types simples: string, int, float. Passons à des types un peu plus complexe

Types complexes

Python amène sont lot de types complexes. N’allez pas croire qu’ils soient plus compliqués mais disons plus vaste à étudier.

Python n’a pas de tableau en soit, mais 3 types bien distrincts qui permettent de stoquer plusieurs valeurs. -la liste -le dictionnaire -le tuple

Le premier type que nous pouvons voir est la liste. Une liste est un objet contenant de 0 à n objets. Nous pouvons donc transporter des valeurs en un seul bloc. Par exemple: li = ['foo', 'bar', 'baz', 1, 4.6] Ici, li contient une liste de 3 chaînes de caractères, un entier et un float. Je vais pouvoir parcourir la liste. Pressez deux fois sur Entrée après cette commande: `

for i in li: print i … foo bar baz 1 4.6 `

Les listes ont un certain nombre de méthodes qui permettent d’ajouter des valeurs, récupérer des valeurs…

` #ajoute une valeur li.append(‘autre valeur’)

#prend la dernière valeur dans ’t’ et supprime cette valeur de la liste

t = li.pop() print t autre valeur t = li.pop() print t 4.6

#idem, mais en partant du début de la liste:

t = li.pop(0) print t foo t = li.pop(0) print t bar

#crée une liste d’entiers et la classer

li = [4,7,3,10,1,2] li.sort() print li [1, 2, 3, 4, 7, 10]

#puis on inverse

li.reverse() print li [10, 7, 4, 3, 2, 1] `

Si vous avez besoin d’une liste vide: li = []

Si vous connaissez d’autres langages, la liste est un tableau simple.

Vient ensuite le dictionnaire, qui est, pour ceux qui connaissent d’autres langages, l’équivalent de la table de hachage ou tableau associatif.

Le dictionnaire est une liste de définitions, il suffit de donner un nom et le contenu, nous pourrons ensuite récupérer une définition depuis le nom.

Voici un dictionnaire et comment accéder aux définitions: `

d = {’nom’: ‘Ferlet’, ‘prenom’: ‘Patrice’, ‘age’: 28} print d[’nom’] Ferlet print d[‘prenom’] Patrice print d[‘age’] 28 `

Vous pouvez ajouter des valeurs de cette manière: `

d[‘addr’]=‘Mon adresse’ `

Reste à voir le tuple. Le tuple est un simple “package” de valeur, il n’a aucune méthodes associé, aucun classement possible… cela sert simplement à manipuler des donneés sans avoir à créer des objets et que cela ne prenne pas trop de place en mémoire.

Voici un exemple de tuple: `

tu=‘hello’,‘world’ print tu (‘hello’, ‘world’) `

’tu’ est donc désormais un tuple contenant deux valeurs. Il est possible de créer un tuple d’une seule valeur soit en plaçant une virgule en fin d’expression, soit en utilisant des parenthèses: `

tu=‘hello’, print tu (‘hello’) tu=(‘hello’) print tu (‘hello’) `

Et donc, vous l’aurez compris, un tuple peut se définir avec des parenthèses: `

tu=(‘hello’,‘world’) print tu (‘hello’, ‘world’) `

On utilise souvent les tuple en retour de méthodes (ou fonction) pour ensuite les re-découper en plusieurs variables. Regardez: `

tu = ‘valeur 1’, ‘valeur 2’, ‘valeur 3’ (a,b,c) = tu print a valeur 1 print b valeur 2 print c valeur 3 `

Cela ressemble à la technique de la méthode list en PHP pour ceux qui connaissent.

Voilà donc comment manipuler des variables, le mieux pour apprendre n’est pas d’utiliser ces concepts dans l’interpréteur de commande. D’ailleurs, pour coder des boucles, des tests ou des objets, cet interpréteur n’est pas très convivial.

Nous allons désormais travailler dans un fichier texte et demande l’exécution à python.

Préparation

Créer vous un répertoire de travail dans votre home, si vous avez une console sous la main tapez:

mkdir $HOME/tutorial/python && cd $HOME/tutorial/python

Vous voilà dans un répertoire prévu pour notre didacticiel partie 1.

Nous allons créer notre premier script, cela va nous permettre d’introduire les régles d’indentation et nous allons pouvoir apprendre comment fonctionnent les tests, les boucles, et enfin la notion objet et modules.

Notre premier script

Vous êtes donc dans votre répertoire de travail, ouvrez un éditeur de texte (gedit est parfait, sinon kwrite, ou scite…) et commencez par enregistrer le fichier (vide je sais) sous le nom ’tuto1.py’ dans ce répertoire de travail.

Je fais cela dans le cas où votre éditeur puisse colorer le code selon le langage utilisé… plutôt que de fouiller dans les menus, il prendra le mode de coloration et d’indentation directement depuis l’extension.

Maintenant, allons-y. Dans ce fichier, vous allez entrer: `

-- coding: utf-8 --

print “Tutorial 1” `

Terminé… enregistrez le et allez dans votre terminal. Vérifiez que vous soyez bien dans notre répertoire de travail (sinon cd $HOME/tutorial/python) puis tapez:

python tuto1.py

Et voilà… Vous l’avez vu passé le message. Et vous l’aurez compris, python interprète les commandes contenus dans le fichier ’tuto1.py’. Voilà ce que vous devriez voir grosso-modo:

patrice@patrice-desktop:~/tutorial/python$ python tuto1.py 
Tutorial 1
patrice@patrice-desktop:~/tutorial/python$ 

Test de valeur

Nous allons effecuter un script qui teste une valeur, cela va introduire la problématique d’indentation.

L’indentation est en fait une simple notion d’écriture de code, nous déplaçons une série de ligne vers la droite pour la rendre plus lisisble. Sauf que python demande une indentation obligatoirement.

Pour tester une valeur, il suffit d’utiliser les tests conditionnels. -== (double égal) pour tester une égalité -< inférieur à -> supérieur à -<= inférieur ou égal à ->= supérieur ou égal à

Teste réussi “si” quelque chose est vrai ou retourne une valeure non null et supérieur à 0. Bref, ajoutez ceci à votre script:

if 1>0: print "test ok"

Nous y sommes, l’indentation se trouve devant la commande print. Il faut utiliser: -soit 3 espaces -soit un caractère de tabulation (touche avec une flèche allant à droite sur la gauche du clavier)

L’indentation voudra dire que “si 1>0” (ce qui est vrai) alors nous inscrivons “test réussit” à l’écran.

Nous pouvons aussi écrire autre chose dans le cas contraire. Ceci grâce au mot clef anglais “else”: if 1>0: print "test ok" print "1>0" else: print "test non ok" print "1<0" print "Fin"

Vous pouvez tester ce script, il affichera “test ok” mais pas “test échoué”.

Par contre “Fin” apparaîtra dans tous les cas puisqu’il n’est pas dans le bloc “else”. Comme cette dernière ligne n’est pas “indentés”, elle n’est pas dans le bloc.

Vous allez pouvoir imbriquer des blocs les uns dans les autres et effectuer des tests dans des tests, ou dans des boucles, ou des boucles de tests… bref… la conception sera pour plus tard.

Voyons un autre genre de test fort sympathique.

Il peut être sympatique de tester si une valeur est dans une liste. Au lieu de “scanner” la liste, le test “if in” est tout simplement clair et précis: `

#une liste de valeurs listing = ‘foo’,‘bar’,‘baz’

#ce test ne marche pas if ’titi’ in listing: print ’titi est dans listing’

#on regarde si la valeur ‘foo’ est dans la liste if ‘foo’ in listing: print “oui, foo est dans listing”

#on regarde si la valeur ’toto’ n’est pas dans listing if ’toto’ not in listing: print “non, toto n’est pas dans listing” `

L’exécution du code va vous dire que:

oui, foo est dans listing
non, toto n'est pas dans listing

Dans les deux derniers cas le test à réussit, donc on peut afficher les phrases. Le premier test ne réussit pas, on passe à la suite.

Reste deux tests, le test de booléen, et le teste de nullité.

Le premier est simple comme bonjour, je vous ai dit qu’un test réussit si la condition est vraie. De ce fait: if True: print "True est vrai, donc je passe" if False: print "Et ceci n'appairait pas"

Vous pouvez donc faire ce genre de manipulation: ` t = True if t: print ’t est Vrai’

#assignation et test: t = False

if 1>0: t =Tue if t: print “le test 1>0 est passé”

`

En ce qui concerne la valeur None, il faut bien comprendre que dans ce cas la variable ne contien “RIEN”. Impossible de tester une égalité ou un booléen. La solution est une syntaxe particulière: ` f = None if f is None: print “f est null”

f = “autre” if f is not None: print “f contient une valeur” `

Cela permet de créer des variables sans leur donner de valeur et nous pouvons tester par la suite si elle a été initialisée. Vous verrez avec le temps que ce genre de test est largement utilisé par les développeur Python.

Conclusion partie 1

Dans cette première partie, je vous ai montré comment utiliser python, créer et utiliser des variables, tester des conditions.

Nous avons vu comment indenter le code, mais pas encore en profondeur. Je continuerai ce didacticiel dans un prochain billet, puis pourquoi pas une page spéciale. Nous verrons comment créer des boucles, puis des classes et des modules.

Nous verrons aussi les notions de sockets, et je vous montrerai mon programme de load-blancing en python utilisant le module (natif) asyncore qui permet d’utiliser la selection de socket asynchrone.

En attendant, allez voir la documentation de Python et le site python:\\ http://python.org/ http://www.python.org/doc/versions/

comments powered by Disqus