Introduction

publicité
Introduction
Je fus enthousiasmé lorsque mon éditeur me demanda
d’écrire un ouvrage de la collection "Guide de survie"
consacré au langage Python. Ce livre est l’un des plus
courts que j’ai écrits, mais il a été pourtant l’un des plus
ardus à rédiger.
Le principe des guides de survie est de présenter au lecteur
des techniques significatives d’un langage. Le Guide de
survie Python a été conçu pour mettre à votre disposition
des techniques Python qui ont du sens, donc faciles à comprendre, et que vous utiliserez pour vous lancer rapidement
dans la programmation d’applications en langage Python.
Le contenu de cet ouvrage est fondé sur Python 3. Gardez
à l’esprit le fait que le langage Python est évolutif. Je vous
recommande la visite du site web Python à l’adresse
http://python.org (en anglais) où vous trouverez de la
documentation en ligne, des extensions, et où vous serez
informé de tous les changements.
Cet ouvrage n’est ni un manuel de référence, ni un guide
englobant la totalité du langage, car ce ne sont pas là ses
finalités. Il a pour vocation d’être un livret compact, accessible, fournissant rapidement et facilement une référence
tandis que vous découvrez de nouveaux aspects du
langage.
© 2013 Pearson France – Python 3 – Brad Dayley
4
Introduction
En concevant ce livre, je me suis efforcé de relever les techniques les plus pertinentes et les plus intéressantes qui aideront réellement les programmes à accomplir les tâches que
l’on attend d’eux en pratique. Les commentaires sont les
bienvenus, de même que les suggestions de techniques
méritant d’être ajoutées à ce livre.
Info
Presque tous les modèles de code utilisés dans ce livre
proviennent de véritables fichiers de travail. Pour votre commodité, les scripts Python, les scripts CGI et les documents HTML
et XML montrés en exemple dans les techniques de ce livre sont
téléchargeables depuis le site web de l’éditeur Pearson. Pour
accéder aux fichiers rapidement, saisissez dans la zone de
recherche les quatre chiffres du début du numéro ISBN de
l’ouvrage : 2588.
Nous espérons que vous apprécierez les techniques de ce
livre, et qu’elles vous seront utiles.
© 2013 Pearson France – Python 3 – Brad Dayley
1
Rappels généraux
sur Python
Python est un puissant langage de programmation orienté
objets. Il a des similarités avec des langages de script comme
Perl, Scheme et TCL, ainsi qu’avec d’autres langages
comme Java et C.
Ce chapitre propose un rapide aperçu du langage Python
afin de vous permettre de mieux comprendre les chapitres
qui suivent. Il ne vise pas à l’exhaustivité, mais constitue un
rappel de ce qu’est ce langage. Il vous fournit les bases qui
vous permettront de vous référer à la documentation
Python.
La version 3 de Python constitue une évolution importante du langage qui a été l’occasion d’un nettoyage en
profondeur et de choix déterminants pour l’avenir, comme
le basculement vers Unicode de toutes les représentations
de chaînes de caractères.
© 2013 Pearson France – Python 3 – Brad Dayley
6
CHAPITRE 1 Rappels généraux sur Python
Pourquoi programmer en
Python ?
Il existe plusieurs bonnes raisons d’adopter Python. C’est
l’un des langages les plus faciles à appréhender et utiliser
rapidement, tout en étant extrêmement puissant pour des
applications plus ambitieuses.Voici quelques-uns des points
forts de Python :
• La portabilité : Python tourne sur presque tous les systèmes d’exploitation, dont Linux/UNIX, Windows,
Mac, OS/2 et d’autres.
• L’intégration : Python peut s’intégrer aux objets
COM, .NET et CORBA. Il existe une implémentation
Jython permettant d’utiliser Python sur n’importe
quelle plate-forme Java, et une implémentation
IronPython qui permet aux programmeurs Python
d’accéder aux bibliothèques .NET. Python peut aussi
contenir du code C ou C++ intégré.
• La facilité : il est très facile de s’initier à Python, monter
en puissance et programmer des applications Python. La
syntaxe claire et lisible facilite considérablement la création des programmes et leur débogage.
• La puissance : de nouvelles extensions sont écrites
régulièrement pour Python, notamment dans le
domaine de l’accès aux bases de données, l’édition audio
et vidéo, les interfaces graphiques utilisateur, le développement pour le Web, etc.
• Le dynamisme : Python est l’un des langages de programmation les plus souples. Il est très facile de faire
preuve de créativité avec le code, pour résoudre des problèmes de conception et de développement.
• C’est un langage ouvert : Python est un langage
Open Source. Il peut de ce fait être librement utilisé et
distribué.
© 2013 Pearson France – Python 3 – Brad Dayley
Appeler l’interpréteur
Appeler l’interpréteur
Les scripts Python sont exécutés par un interpréteur
Python. Sur la plupart des systèmes, vous pouvez le démarrer en tapant la commande python à l’invite de la console.
Cette commande peut toutefois varier selon le système et
l’environnement de développement que vous avez configuré1. Cette section évoque les méthodes standard pour
appeler l’interpréteur et lui faire exécuter les instructions
Python et les fichiers de script.
Si vous appelez l’interpréteur sans lui fournir un fichier de
script en paramètre, l’invite suivante s’affiche :
Python 3.3.1 (v3.3.1:d9893d13c628, Apr 6 2013, 20:25:12)
[MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more
information.
>>>
L’invite de Python est indiquée par les trois chevrons >>>.
Si vous exécutez une commande exigeant une saisie supplémentaire, une invite en points de suspension ... s’affiche. À l’invite de l’interpréteur, vous pouvez exécuter des
instructions Python au coup par coup, comme :
>>> print("Affichage d’une chaîne")
Affichage d’une chaîne
L’appel de l’interpréteur avec un paramètre de script,
comme nous le verrons plus loin, démarre l’exécution du
script qui se poursuit jusqu’à ce qu’il soit terminé. Le script
achevé, l’interpréteur n’est plus actif. Dans l’exemple suivant, l’invite de ligne de commande correspond à mon­
linux:/livre # ; la saisie commence au mot python :
monlinux:/livre # python script.py
Exécution d’un script
monlinux:/livre #
1.N.d.T. : Pour plus de confort, nous vous invitons à adopter un atelier
de développement, par exemple celui nommé IDLE.Vous disposez ainsi
de l’interpréteur dans une fenêtre avec des menus pour les commandes
principales (ouvrir un fichier source, lancer l’exécution, etc.).
© 2013 Pearson France – Python 3 – Brad Dayley
7
8
CHAPITRE 1 Rappels généraux sur Python
On peut aussi exécuter les scripts depuis l’intérieur de l’interpréteur en recourant à la fonction Python exec(open(nom­
fic).read()). L’exemple suivant montre un script démarré
ainsi :
>>> exec(open(“script.py”).read())
Exécution d’un script
>>>
Note
La fonction execfile n’existe plus en Python 3. Utilisez la
syntaxe ci-dessus.
Types de données prédéfinis
(intégrés)
Les types intégrés que vous utiliserez le plus fréquemment
dans Python peuvent être groupés dans les catégories que
répertorie le Tableau 1.1. La colonne Nom du type indique
le nom associé à chaque type d’objet intégré tel qu’il est renvoyé par la fonction isinstance(objet, nomtype) comme
suit :
>>> s = "Une simple chaîne"
>>> print(isinstance(s, str))
True
>>> print(isinstance(s, dict))
False
>>>
Info
Le module type doit être importé pour utiliser n’importe quel
type d’objet comme type et types.ModuleType. Les types
basestring, xrange et long n’existent plus dans Python 3.
© 2013 Pearson France – Python 3 – Brad Dayley
Types de données prédéfinis (intégrés)
Tableau 1.1 : Les types intégrés Python courants
Catégorie du type Nom du type
Description
None
types.NoneType
Objet None (objet nul)
Nombres
bool
Booléen True (vrai) ou
False (faux)
int
Entier (le type long a
disparu en Python 3)
float
Point flottant
complex
Nombre complexe
set
Ensemble modifiable
frozenset
Ensemble immuable
str
Chaîne de caractères
unicode
Chaîne de caractères
Unicode
list
Liste
range
Séquence immuable
tuple
Tuple
Liste associative
dict
Dictionnaire
Fichiers
file
Type pour tous les
intégrés
object
Parent de tous les types
et classes
Ensembles
Séquences
types.Builtin FunctionType Fonction intégrée
types.Builtin MethodType
Méthode intégrée
types.FunctionType
Fonction définie par le
programmeur
types.InstanceType
Instance de classe
types.MethodType
Méthode liée
© 2013 Pearson France – Python 3 – Brad Dayley
9
10
CHAPITRE 1 Rappels généraux sur Python
Catégorie du type Nom du type
Description
types.Unbounded
Méthode non liée
Modules
types.ModuleType
Module
Classes
object
Parent de toutes les
classes
Type
type
Type de tous les modules
intégrés
None
Le type None équivaut à un objet nul, dépourvu de valeur.
Le type None est le seul objet, dans Python, pouvant être un
objet nul. Utilisé dans un programme, sa syntaxe se réduit à
None.
Nombres
Dans Python, les types numériques sont sans détour. Le
type bool peut avoir deux valeurs True (vrai) et False
(faux). Le type int stocke en interne des nombres entiers
jusqu’à la capacité du processeur (int remplace le type long
qui disparaît en Python 3). Le type float utilise la double
précision native pour stocker des chiffres en point flottant
jusqu’à 64 bits. Le type complex stocke des valeurs sous la
forme de paires de chiffres à point flottant. Les diverses
valeurs sont accessibles en utilisant les attributs z.real et
z.imag de l’objet complexe.
Ensembles (set)
Le type set représente un ensemble non ordonné d’éléments uniques. Il existe deux types d’ensembles : modifiables, et non modifiables. Dans les ensembles modifiables
© 2013 Pearson France – Python 3 – Brad Dayley
Types de données prédéfinis (intégrés)
– on dit aussi "mutables" –, des éléments peuvent être ajoutés ou ôtés. Les ensembles non modifiables, ou "immutables", ne peuvent pas être changés après leur création.
Info
Tous les éléments placés dans un ensemble doivent être de type
non modifiable. C’est pourquoi les ensembles ne peuvent pas
contenir des éléments comme des listes ou des dictionnaires. Ils
peuvent cependant comprendre des éléments comme des
chaînes et des tuples.
Séquences (str et list)
Il existe plusieurs types de séquences dans Python. Les
séquences sont ordonnées et peuvent être indexées par des
entiers non négatifs. Les séquences sont faciles à manipuler
et peuvent être faites de quasi n’importe quel objet Python.
Les deux types de séquences les plus utilisés sont les chaînes
str et les listes. Le Chapitre 2 explique la création et l’utilisation des types "chaîne". Le Chapitre 3 présente les types
de séquences les plus communes et explique comment les
créer et les manipuler.
Listes associatives (dict)
La liste associative associe deux collections d’objets. La première est un ensemble d’objets clés qui indexent la seconde
collection contenant un ensemble d’objets ayant une
valeur. Chaque objet "clé" indexe un objet "valeur" spécifique dans l’ensemble corrélé. L’objet clé doit être de type
non modifiable. L’objet ayant une valeur peut être presque
n’importe quel objet Python.
Le dictionnaire est le seul type "liste associative" actuellement intégré à Python. Le Chapitre 3 donne un exemple
de création et d’utilisation d’un dictionnaire.
© 2013 Pearson France – Python 3 – Brad Dayley
11
3
Gestion des types
de données
Parmi les types de données prédéfinis de Python, certains
sont simples (atomiques) comme int et float, et d’autres
sont complexes, c’est-à-dire qu’une variable complexe
contient plusieurs valeurs simples. C’est le cas des chaînes
et les dictionnaires. Les trois types complexes que vous
devrez assimiler et que vous utiliserez le plus souvent pour
gérer des données sont la liste, le tuple et le dictionnaire.
Pour Python, une liste est simplement un ensemble ordonné
d’objets. Les objets peuvent être nommés avec n’importe
quel nom admis par Python, et la liste peut grandir dynamiquement afin de supporter l’ajout de nouveaux objets.
Les objets d’une liste peuvent être de différents types et
Python gardera en arrière-plan la trace du type de données
des objets. Les listes sont des séquences ordonnées. Les éléments d’une liste sont accessibles en utilisant un index
entier non négatif basé zéro (le premier élément est à la
position zéro).
© 2013 Pearson France – Python 3 – Brad Dayley
58
CHAPITRE 3 Gestion des types de données
Un tuple n’est, dans un sens, que la version en lecture seule
d’une liste. C’est aussi une séquence d’objets ordonnés,
mais un tuple est non modifiable : il est impossible d’ajouter
ou d’ôter un élément.
Un dictionnaire est un ensemble non ordonné de paires
d’objets. Chaque paire est constituée d’un objet clé et d’un
objet valeur. Un dictionnaire fonctionne à la manière
d’une table de hachage, dans la mesure où la clé sert à accéder à un objet valeur. Un dictionnaire n’est pas ordonné ;
de ce fait, aucune méthode d’indexation ne permet d’accéder aux éléments.
Ce chapitre étudie les techniques servant à gérer les données à l’aide des types de données liste, tuple et
dictionnaire.
Définition d’une liste
numList = [2000, 2003, 2005, 2006]
stringList = ["Code", "Python", "Essentiel"]
mixedList = [1, 2, "trois", 4]
subList = ["Python", "Guide", ["Copyright", 2006]]
listList = [numList, stringList, mixedList, subList]
Définir une liste se réduit à lister entre crochets droits un
certain nombre d’objets Python pour les affecter à un nom
de variable avec l’opérateur =. La liste peut contenir n’importe quelle sorte d’objet Python. Une simple liste numérique équivaut à un tableau ; les listes sont toutefois plus
dynamiques, et plusieurs types peuvent cohabiter au sein
d’une même liste.
L’exemple de code suivant montre comment créer des
listes aussi bien homogènes qu’hétérogènes. Remarquez
que les listes acceptent des nombres, des chaînes, des définitions de listes et des noms de variables.
© 2013 Pearson France – Python 3 – Brad Dayley
Définition d’une liste
print("=== 0301_deflist.py ===")
numList = [2000, 2009, 2020, 2038]
stringList = ["Code", "Python", "Essentiel"]
mixedList = [1, 2, "trois", 4]
subList = ["Python", "Guide", ["Copyright", 2013]]
listeGlobale = [numList, stringList, mixedList, subList]
for x in listeGlobale:
for y in x:
if isinstance(y, int):
print(“Numérique : “ + str(y+1))
if isinstance(y, str):
print(“Chaîne : “ + y)
0301_def_list.py
=== 0301_deflist.py ===
Numérique : 2001
Numérique : 2010
Numérique : 2021
Numérique : 2039
Chaîne : Code
Chaîne : Python
Chaîne : Essentiel
Numérique : 2
Numérique : 3
Chaîne : trois
Numérique : 5
Chaîne : Python
Chaîne : Guide
Exécution du script
© 2013 Pearson France – Python 3 – Brad Dayley
59
60
CHAPITRE 3 Gestion des types de données
Accès au contenu d’une liste
for x in numList:
print(x+1)
print(stringList[0] + ‘ ‘ + stringList[1] + ‘ ‘ + \
stringList[2])
print(stringList[-2])
if isinstance(subList, list):
print(subList[2][0])
La liste définie, l’accès à ses éléments s’effectue par un
index basé sur zéro. Le premier élément de la liste est à
l’index 0, le deuxième à l’index 1, et ainsi de suite.
L’exemple de code acc_list.py montre comment accéder à
tous les éléments d’une liste ordonnée en utilisant le mot
clé for et aussi comment accéder en particulier à chacun
des éléments de la liste.
Si un élément de la liste est un objet liste, vous accédez aux
éléments de cette liste en plaçant des crochets d’indexation
à la fin, comme si vous vouliez accéder aux éléments d’un
tableau multidimensionnel.
Info
Python autorise l’usage d’index négatifs pour accéder à la liste
par la fin plutôt que par le début. Par exemple, pour accéder à
l’élément final d’une liste, vous utiliserez un index de ‑1. Et
pour accéder à l’avant-dernier élément de la liste, vous utiliserez un index de ‑2, et ainsi de suite. Ceci peut être extrêmement utile sur une liste dynamique changeant constamment.
print("=== 0302_acclist.py ===")
numList = [2000, 2010, 2015, 2026]
stringList = ["Code", "Python", "Essentiel"]
mixedList = [1, 2, "trois", 4]
subList = ["Python", "Guide", ["Copyright", 2013]]
© 2013 Pearson France – Python 3 – Brad Dayley
Fractionnement d’une liste
# Tous les éléments
for x in numList:
print(x+100)
# Eléments spécifiques
print(stringList[0] + ‘ ‘ + stringList[1] + ‘ ‘ +
stringList[2])
# Index négatifs
print(stringList[-2])
# Accès aux éléments d’une sous-liste
if isinstance(subList, list):
print(subList[2][0])
0302_acc_list.py
=== 0302_acclist.py ===
2100
2110
2115
2126
Code Python Essentiel
Python
Copyright
Exécution du script
Fractionnement d’une liste
moitie1 = listeMois[ : nbrDemi]
moitie2 = listeMois[nbrDemi : ]
nbrMots = len(moitie1)
debutMilieu = nbrMots/2
moitieMilieu = listeMois[debutMilieu : debutMilieu+nbrDemi]
© 2013 Pearson France – Python 3 – Brad Dayley
61
62
CHAPITRE 3 Gestion des types de données
Une tranche (slice) est un sous-ensemble d’une liste. Python
fournit une syntaxe permettant d’extraire rapidement des
tranches spécifiques d’une liste.
Une tranche peut être obtenue en référençant la liste et en
spécifiant deux index intérieurs (séparés par un signe deuxpoints) qui pointent entre des caractères, au lieu d’un seul
numéro d’index. Le numéro du premier index représente
l’élément de début, dans la liste, tandis que le second index
représente l’élément de fin.
La tranche est renvoyée en tant que liste. L’accès à une
tranche s’effectue donc comme pour toute autre liste.
Info
Python autorise les indices négatifs pour indexer à partir de la
fin plutôt que depuis le début. Par exemple, pour accéder aux
trois derniers éléments d’une liste, vous utiliserez les index ‑3
et ‑1.
print("=== 0303_slice_list.py ===\n")
listeMois = ["Janvier", "Février", "Mars", "Avril", \
"Mai", "Juin", "Juillet", "Août", \
"Septembre", "Octobre", "Novembre", "Décembre"]
nbrMots = len(listeMois)
nbrDemi = int(nbrMots/2)
print("Indice de la moitié :", nbrDemi)
#Tranche de début
moitie1 = listeMois[ : nbrDemi]
print(moitie1)
#Tranche de fin
moitie2 = listeMois[nbrDemi : ]
print("\nSeconde moitié de liste :")
print(moitie2)
© 2013 Pearson France – Python 3 – Brad Dayley
Fractionnement d’une liste
#Tranche du milieu
nbrMots = len(moitie1)
debutMilieu = int(nbrMots/2)
moitieMilieu = listeMois[debutMilieu : debutMilieu+nbrDemi]
print("\nPartie centrale de liste :")
print(moitieMilieu)
#Index négatifs
print("\nIndex de liste négatifs :")
print((listeMois[-5 : -1]))
0303_slice_list.py
=== 0303_slice_list.py ===
Indice de la moitié : 6
[‘Janvier’, ‘Février’, ‘Mars’, ‘Avril’, ‘Mai’, ‘Juin’]
Seconde moitié de liste :
[‘Juillet’, ‘Août’, ‘Septembre’, ‘Octobre’, ‘Novembre’,
‘Décembre’]
Partie centrale de liste :
[‘Avril’, ‘Mai’, ‘Juin’, ‘Juillet’, ‘Août’, ‘Septembre’]
Index de liste négatifs :
[‘Août’, ‘Septembre’, ‘Octobre’, ‘Novembre’]
Exécution du script
© 2013 Pearson France – Python 3 – Brad Dayley
63
Téléchargement