Bases python
Transcript of Bases python
Présentation Superviseur AsterPrésentation Superviseur Aster
Christian Caremoli
• Introduction à Python• Le superviseur Aster et Python
Introduction à PythonIntroduction à Python
• Utiliser Python, structure d’un programme• Variables et types intégrés• Instructions, tests et boucles• Fonctions, modules et packages• Classes et objets• Exceptions
3
Utiliser Python en interactifUtiliser Python en interactif
• Utilisation interactive% python
Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>
• ^D (control-D) termine l’exécution>>> ^D
%
• Les commentaires commencent par ‘#’>>> 2+2 # Commentaire sur la même ligne
4
>>> 7/3 # Les nombres sont entiers par défaut
2
>>> x = y = z = 0 # Affectation multiple
>>> z
0
4
Exécuter des programmes PythonExécuter des programmes Python
• En général% python myprogram.py
• On peut créer des scripts exécutables– Rendre le fichier exécutable :
% chmod +x myprogram.py
– La première ligne du script indique comment l’exécuter :#!/usr/bin/python
– Ensuite, on peut simplement taper le nom du script pour l’exécuter% myprogram.py
5
Structure d’un programme PythonStructure d’un programme Python
• Pas de déclaration de type ; Une variable est directement affectée avec l’opérateur ‘=‘
• Les blocs de codes sont indiqués par indentation (pas de {}, comme en C) homogène
i = 0
while i < 10:
print i
i = i + 1
– En interactif, prompt secondaire ...>>> if a >1:
... print "a plus grand que 1"
• Il est possible de mettre plusieurs instructions sur la même ligne et d’étendre une instruction sur plusieurs lignes
a=10;b=12;c=5
x=2*a + \
4*b
7
L’affectationL’affectation
• Il est important de bien comprendre les principes de l’affectation (a=b)– L'affectation permet de lier des objets à des noms de variables.– L’affectation crée des références pas des copies.– Les noms sont créés automatiquement à la première affectation.– Les noms doivent être créés avant d'être référencés. C’est une erreur
d’utiliser un nom pas encore associé à une valeur. – Les variables sont modifiables et n’ont pas de type, c'est une simple
référence sur un objet qui lui comporte un type. Il est donc possible d’affecter successivement plusieurs objets de types différents à une même variable.
– Utiliser le module copy quand on veut un nouvel objet plutôt qu’une référence sur un objet existant.
8
Règles sur les noms de variablesRègles sur les noms de variables
• Syntaxe : (blanc souligné ou lettre) + (un nombre quelconque de chiffres ou lettres ou blancs soulignés)– _rick est un nom correct– 2_rick ne l’est pas
• Sensible à la casse– Rick est différent de rick
• Mots réservés :and, assert, break, class, continue, def, del, elif, else, except,
exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while
10
Les types numériquesLes types numériques
• Entier court (32 bits)A = 1
b = 3/5 # 0, à cause de la troncature
• Entier long (taille illimitée)C=314314314L
• Flottantpi = 3.1415927;x=2.3e5;y=4.8E6
• Octal, HexadécimalO=0132
H=0x9ff
• ComplexeC=1.+2j
11
Les chaînesLes chaînes
• Les variantesMyString = "this is a string"
myotherstring = 'this is also a string'
NewString = MyString + " " + MyOtherString
"If you mix quotes it doesn't end the string«
S="""cette chaine est sur plusieurs
lignes grâce aux triples guillemets
"""
• Indiçage et extraction0 1 2 3 -3 -2 -1
"e x e m p l e d e c h a i n e"
[: :]
• Il est impossible de modifier une chaîne en place. Il faut en créer unenouvelle.
12
Les objets conteneursLes objets conteneurs
• Les conteneurs portent des collections d'autres objets• Listes
– Séquence d'objets de types quelconques– On peut ajouter, supprimer, changer des éléments
a = ['Hi',1,0.234]
• Tuples– Semblables aux listes mais non modifiables
atom = (atomic_symbol,x,y,z)
• Dictionnaires– Conteneur indexé par des clés (pas exclusivement des chaînes)
atomic_number = {'Dummy' : 0,'H' : 1,'He' : 2}
atomic_number['He'] # retourne 2
13
Exemples de manipulation de listesExemples de manipulation de listes>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam','eggs',100,1234]
>>> a[0] # Listes démarrent à 0, comme en C
'spam'
>>> a[3]
1234
>>> a[-2] # Les indices négatifs partent de la fin
100
>>> a[:2] # ":" indique un intervalle
['spam','eggs']
14
Étendre des listesÉtendre des listes
>>> a + ['bacon']
['spam','eggs',100,1234,'bacon']
>>> a.append('!')
['spam','eggs',100,1234,'!']
>>> 2*a
['spam','eggs',100,1234,'!','spam','eggs',100,
1234,'!']
15
Les objets fichiersLes objets fichiers
• Permettent d'accéder depuis Python à des fichiers• Sont créés par la commande open
>>> mon_fichier = open('fichier', ‘w’)
• Sont dotés de méthodes, dont :– read : pour lire le contenu du fichier– write : pour écrire dans le fichier– close : pour fermer le fichier
16
LES INSTRUCTIONSLES INSTRUCTIONS
• Expressions• L'instruction print• Instructions de contrôle de flux : if, while, for
17
ExpressionsExpressions
• Appel de fonctionspam(ham, eggs)
• Référence à des éléments de Liste/dictionnairespam[ham]
• Appels de méthodespam.ham
spam.ham(eggs)
• Expressions compositesspam < ham and ham != eggs
• Tests d'intervalle spam < ham < eggs
18
L'instruction printL'instruction print
• La commande print imprime les variables sur la sortie standard >>> print "a", "b"
a b
>>> print "a"+"b"
ab
>>> print "%s %s" % (a,b)
a b
• Notes– Print ajoute un retour chariot ; utiliser print ..., pour le supprimer– print(string) est equivalent à sys.stdout.write(string + '\n')
20
Tests ifTests if
• Forme de base :if <test1>:
<instructions1>
elif <test2>:
<instructions2>
else:
<instructions3>
• Exemple:x = 'killer rabbit' # Affectation
if x == 'roger':
print 'How\'s Jessica?'
elif x == 'bugs':
print 'What\'s up, Doc?'
else:
print 'Run away! Run away!'
21
Tests de véritéTests de vérité
• En général,– vrai : nombre différent de zéro ou objet non vide.– faux signifie non vrai : zéro, un objet vide ou None.– Les tests d'égalité et les comparaisons retourne 1 ou 0 (Vrai, Faux),
2 < 3 # vrai, retourne 1
3 <= 2 # faux, retourne 0
– les opérateurs and et or retournent un objet opérande vrai ou faux.X and Y # retourne X si faux sinon Y (vrai ou faux)
X or Y # retourne X si vrai sinon Y (vrai ou faux)
not X # vrai si X est faux (retourne 1 ou 0)
– Égalité versus identitéx == y # x et y ont la même valeur
x is y # x et y référencent le même objet
# id(x) == id(y)
23
Boucles Boucles whilewhile
• Forme de base :while <test1>: # test
<instructions1> # corps de la boucle
else: # optionnel
<instructions2> # exécuté si la boucle n'est pas interrompue
• Exempleswhile 1: # boucle infinie
print 'type Ctrl-C to stop me!'
a,b = 0,10
while a < b:
print a,
a = a + 1
24
break, continue, break, continue, passpass, , elseelse
• break– Sort de la boucle
• continue– Saute à la fin de la boucle la plus imbriquée (itération suivante)
• pass– Ne fait rien (bouche-trou)
while <test>:
<instructions>
if <test2>: break
if <test3>: continue
<autres instructions>
else:
<plus d'instructions>
25
Boucles forBoucles for
• for est un itérateur de séquence– Parcourt les items d'une liste, chaîne, tuple, etc.– Forme de base :
for <item> in <séquence>:
<instructions>
else: # optionnel
<autres instructions> # exécuté si la boucle n'est pas
# interrompue par un break
– On peut utiliser break, continue, pass comme dans un while– Peut être utilisé avec range pour gérer un compteur de boucle
for i in range(10):
print i
27
Pourquoi utiliser des fonctions ?Pourquoi utiliser des fonctions ?
• Réutilisation de code– Regrouper des instructions que l'on veut utiliser à plusieurs endroits.
• Décomposition procédurale– Découper une tache complexe en plusieurs taches– Plus facile pour le lecteur à comprendre
28
Définition des fonctionsDéfinition des fonctions
• def crée une fonction et lui affecte un nom• return renvoie un résultat à l'appelant• Les arguments sont passés par référence (comme dans une
affectation)• Les types des arguments et de la valeur de retour ne sont pas
déclarés • Forme de base :
def <nom>(arg1, arg2, ..., argN):
<instructions>
return <valeur>
• Exemple :def times(x,y):
return x*y
29
Autre exemple : tronc commun de Autre exemple : tronc commun de deux séquencesdeux séquences
def intersect(seq1, seq2):
"""Retourne une liste contenant tous les éléments de seq1 présents dans seq2."""
res = [] # démarre avec une liste vide
for x in seq1:
if x in seq2:
res.append(x)
return res
30
Règles de contexte pour les fonctionsRègles de contexte pour les fonctions
• Règle LGB :– Les références à un nom sont recherchées dans 3 contextes : local, global, built-in– Les affectations créent ou changent les noms locaux par défaut– Il est possible de forcer les affectations à opérer dans le contexte global avec la
commande global
• ExempleX = 99
def func(Y):
Z = X+Y #X est pris dans le contexte global, Z est local
global X
X=100 #X est affecté dans le contexte global
return Z
func(1)
31
Passage d'arguments aux fonctionsPassage d'arguments aux fonctions
• Les arguments sont passés par affectation– Les arguments sont affectés à des noms locaux– Une affectation à un nom d'argument n'affecte pas l'appelant– Changer un argument mutable peut affecter l'appelant
def changer (x,y):
x = 2 #change seulement la valeur locale de x
y[0] = 'hi' #change l'objet partagé mutable y
32
Arguments optionnelsArguments optionnels
• Il est possible de définir des valeurs par défaut pour les arguments qui n'ont pas besoin d'être passés
def func(a, b, c=10, d=100):
print a, b, c, d
>>> func(1,2)
1 2 10 100
>>> func(1,2,3,4)
1,2,3,4
• Il est possible d'utiliser le nom de l'argument (clé=valeur)>>> func(b=2,a=1,d=4)
1,2,10,4
34
ModulesModules
• Un module est un ensemble de fonctions et de variables définies dans un fichier séparé
• Un module est un espace de noms– Peut être utilisé pour organiser les noms de variables
atom.position = atom.position - molecule.position
• Les éléments d'un module sont accédés avec la commande fromou import
from module import function
function()
import module
module.function()
• Variable d'environnement PYTHONPATH– Chemin d'accès aux modules à importer
% export PYTHONPATH=.:/ul/rpm/python
35
Pourquoi utiliser des modules?Pourquoi utiliser des modules?
• Réutilisation– Pour les fonctions qui peuvent être utilisées par différents programmes
• Partition de l'espace des noms– Regroupe des données et des fonctions logiquement associées en évitant
les collisions de noms
• Permet d'implémenter des données ou des services communs– Permet l'accès à une structure de données partagée par plusieurs sous-
programmes
36
PackagePackage
• Permet de structurer l'espace des noms de modules Python par l'utilisation de noms de modules hiérarchisés. A.B désigne le sous-module B dans le package A.
• Permet d'éviter les collisions de noms de modules entre bibliothèques multi-modules
• Les modules d'un package sont regroupés dans un répertoire contenant un fichier __init__.py. Par exemple :
Sound/ Top-level package __init__.py Initialize the sound package Formats/ Subpackage for file format conversions
__init__.py
wavread.py
Effects/ Subpackage for sound effects
__init__.py
echo.py
38
Quelques fonctions de baseQuelques fonctions de base
– str(obj) retourne une représentation de obj sous forme de chaîne– list(seq) convertit une séquence en liste – tuple(seq) convertit une séquence en tuple– int(obj) retourne une représentation entière de obj – float(x) retourne une représentation flottante de obj – chr(i) retourne le caractère de code ASCII i– ord(c) retourne le code ASCII du caractère c
– min(seq) retourne le plus petit élément d'une séquence– max(seq) retourne le plus grand élément d'une séquence
39
Le module stringLe module string
• string permet de manipuler des chaînes– atof() Convertit une chaîne en un flottant– atoi() Convertit une chaîne en un entier– capitalize() Met en capitale le 1er caractère d'une chaîne– capwords() Met en capitales chaque mot d'une chaîne– replace() Réalise une substitution sur une chaîne– split() Découpe une chaîne– lower() Convertit une chaîne en minuscule– upper() Convertit une chaîne en majuscule– strip() Enlève les blancs en tête et en fin de chaîne
40
Module reModule re
• Pour manipulations plus avancées de chaînes à base d'expressions régulières.– . Match any character but newline– ^ Match the start of a string– $ Match the end of a string– * "Any number of what just preceeded"– + "One or more of what just preceeded"– | "Either the thing before me or the thing after me– \w Matches any alphanumeric character– tomato Matches the string "tomato"
41
Module osModule os
• Interface générique vers le système d'exploitation– getcwd() Répertoire courant– listdir() Liste des fichiers du répertoire– chown() Change le propriétaire d'un fichier– chmod() Change les permissions d'un fichier– rename() Renomme un fichier– remove() Détruit un fichier– mkdir() Crée un nouveau répertoire– system() Exécute une commande dans un sous-shell
42
Mesure de temps et Mesure de temps et profilingprofiling
• Mesure de temps avec le module time– time.clock() Seconds depuis le premier appel à clock()
• Module profile pour le profiling– profile.run(func(arg1, arg2))
ncalls tottime percall cumtime percall filename
100 8.541 0.086 8.574 0.086 makezer
100 0.101 0.001 0.101 0.001 one_mul
1 0.001 0.001 8.823 8.823 do_timi
44
Qu'est ce qu'un objet?Qu'est ce qu'un objet?
• Un élément logiciel qui contient des variables et des méthodes• Principes de la conception objet
– Encapsulation: sépare le code en une interface publique, et une implémentation
privée de cette interface
– Polymorphisme :permet à une méthode d’agir différemment en fonction du type d’objet
qui est la cible de l’opération.
– Héritage :permet de créer des sous-classes qui contiennent des spécialisations
de leurs parents
45
Classes et objetsClasses et objets
• Les classes définissent les objets– Les objets sont des instances de classes
class atom:
def __init__(self,atno,x,y,z):
self.atno = atno
self.position = (x,y,z)
__init__ est le constructeur par défaut
self indique l'objet lui-même,comme this en Java.
46
Exemple: Classe Exemple: Classe atomatomclass atom:
def __init__(self,atno,x,y,z):
self.atno = atno
self.position = (x,y,z)
def symbol(self): # une méthode
return Atno_to_Symbol[atno]
def __repr__(self): # surcharge print
return '%d %10.4f %10.4f %10.4f' %
(self.atno, self.position[0],
self.position[1],self.position[2])
>>> at = atom(6,0.0,1.0,2.0)
>>> print at
6 0.0000 1.0000 2.0000
>>> at.symbol()
'C'
48
ExceptionsExceptions
• Mécanisme de contrôle de déroulement de programme– Les erreurs qui se produisent pendant l'exécution d'un programme Python
sont des exceptions qui remontent au sommet du processus si elles ne sont pas interceptées.
– Il est possible de les intercepter par le mécanisme de try, except• Forme de base :
try :
<instructions> # corps
except <nom1>:
<instructions1> # exécuté si l'exception <nom1> est
# levée dans le try
except <nom2>:
<instructions2> # exécuté si <nom2> est levée
else: # optionnel
<autres instructions> # exécuté si pas d'exception
49
Instruction Instruction raiseraise
• Il est possible de lever ses propres exceptions avec la commanderaise
• Formes de base :raise <nom1>
raise <nom2>,<data>
raise classe,instance
raise instance
raise # re-raise de l'exception courante
50
Instruction Instruction assertassert
• Permet de rajouter des contrôles pour le débogage d'un programme
• Forme de base :assert <test>, <données> # la partie données n’est pas obligatoire.
# " assert" lève toujours l'exception AssertionError
• Raccourci pour :if __debug__ : # enlevé à la compilation avec l'option -O
if not <test>:
raise AssertionError, <données>
51
RéférencesRéférences
• Pages Web– http://www.python.org Site Web Python (tutorial) – http://www.ibiblio.org/obp/thinkCSpy A Downey et J Elkner : "How to
think like a computer scientist" et adaptation française par G. Swinnen
• Livres– Introduction à Python, par M Lutz & D Ascher, (traduction française)
Editions O'Reilly, Paris, 2000, 385 p., ISBN 2-84177-089-3– L'intro Python, par I Van Laningham, (traduction française), Editions
CampusPress, Paris, 2000, 484 p., ISBN 2-7440-0946-6 – Python précis & concis (aide-mémoire), par M Lutz, (traduction
française), Editions O'Reilly, Paris, 2000, 80 p., ISBN 2-84177-111-3