5. Tuple
• Conteneur séquentiel non mutable
• Ensemble ordonné d’éléments
– Pas forcément constants
– Exemples :
a = (1,2,3) # instancie un nouveau tuple
a[1] # retourne 2
a[0] = 4 # interdit
a.append(42) # faux
b = a + (4,) # recopie complète de a dans b
6. Liste Le premier item commence toujours avec l'index 0.
Pour créer une liste, rien de plus simple:
>>> liste = []
Ajouter une valeur à une liste python
>>> liste = [1,2,3]
>>> liste = []
>>> liste []
>>> liste.append(1)
>>> liste [1]
>>> liste.append("ok")
>>> liste [1, 'ok']
7. Dictionnaire
• Conteneur associatif
• Exemple
>>> d = {1:'1', 3:'3', 2:'2'} # instancier un dictionnaire, la clef doit
# être un objet constant (c’est son hash
# qui détermine sa valeur d’index)
>>> d
{1: '1', 2: '2', 3: '3'}
>>> 1 in d # test d'appartenance
True
>>> d[4] = '4' # insérer un élément
>>> d
{1: '1', 2: '2', 3: '3', 4: '4'}
8. Dictionnaire
>>> del d[2] # supprimer un élément en fonction de sa clef
>>> d
{1: '1', 3: '3', 4: '4'}
>>> d.keys() # retourne la liste des clefs (peut être très coûteux)
[1, 3, 4]
>>> d.values() # retourne la liste des valeurs
['1', '3', '4']
>>> d.items() # retourne la liste des couples (clef, value)
[(1, '1'), (3, '3'), (4, '4')]
>>> d[6] # retourne une exception en cas de clef erronée
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 6
>>> d.get(6) # retourne None
10. Itérateurs
• Tous les conteneurs séquentiels peuvent être
itérés
– list, tuple, dict, …
– Exemple :
for i in [1,2,3,4]
print i
– Remarque: la suppression d’un élément sur une
séquence itérée invalide silencieusement
l’itérateur
11. Itérateurs
• Classe dont les instances sont itérables
class MyList(object):
def __init__(self, l):
self.l = l
self.index = 0
def __iter__(self):
return self
def next(self):
if self.index == len(self.l):
raise StopIteration
try:
return self.l[self.index]
finally:
self.index += 1
12. Itérateurs
• Itérer (consommer)
– Méthode classique
for i in MyList([0,1,2]):
print I
– Strictement equivalent à (principe réalisé en interne)
it = iter(MyList([0,1,2])) # délégue à __iter__()
while True:
try:
print it.next()
except StopIteration:
break
– Sortie dans les deux cas :
0
1
2
– Remarque : faire un itérateur infini sans StopIteration
14. Fonctions
• Définition d’une fonction par ‘def’
def f(a,b=3):
if a:
return a + b
f(2) # retourne 5
f(2, 42) # retourne 44
f(0) # retourne None
f(0,42) # retourne None
15. Fonctions
• Pas de déclaration de type des arguments ni de la valeur de retour
• Duck typing (if it walks like a duck, quacks like a duck,…, it must be a duck)
• Retourne l’objet None par défaut (ou en cas de return sans argument)
• Une fonction peut être imbriquée dans une autre
17. Classes
• Exemple 2 (héritage, self-modication) :
class A(object):
pass
class B(A):
pass
class C(object):
pass
print B.__bases__ # (1)
B.__bases__ += (C,)
print B.__bases__ # (2)
Résultats :
(<class __main__.A>,) # (1)
(<class __main__.A>, <class __main__.C>) # (2)
18. Classes
• Exemple 1 :
class Test(object):
"""commentaire"""
def __init__(self, a):
self._a = a
def meth(self):
return self._a * 42
def __str__(self):
return str(self._a)
print 'type de Test:', type(Test)
c = Test(2)
print 'appel de la methode __str__():', c
print 'type de c:', type(c)
print 'attributs de c:', dir(c)
print 'appel de methode:', c.meth()
c.nouvel_attribut = 42
print 'nouvel attribut::', c.nouvel_attribut
print 'introspection:', getattr(c,'meth')
19. Classes
• Pas de notions de classe abstraite
• Héritage multiple (à la c++), depth-first, left-to-
right
• Les méthodes sont toutes virtuelles
• Attributs de classe
• Méthodes statiques
• Fonction super(), pour référer à la classe
parente
20. Classes
Exemple 3 (surcharge d’opérateurs):
class MyInt(object):
def __init__(self, i):
self.i = i
def __add__(self, rhs):
return MyInt(self.i + rhs.i)
def __str__(self):
return str(self.i)
un = MyInt(1)
deux = MyInt(2)
trois = un + deux
print trois
sundae:~/Desktop$ python myint.py
3
22. • Un module est un fichier contenant des définitions et des instructions Python. Le nom du fichier
est le nom du module auquel est ajouté le suffixe .py.
• Avantages:
• - permet de relancer un même programme sans tout réécrire
• -d’utiliser dans plusieurs programmes une même fonction sans la réécrire dans chaque
programme.
• Chaque module a sa propre table de symboles privée, qui est utilisée comme table de symbole
globale par toutes les fonctions définies dans le module. Ainsi, l'auteur d'un module peut utiliser
des variables globales dans le module sans s'inquiéter des désaccords accidentels avec les
variables globales d'un utilisateur.
23. Modules
Importer un module (équivalent d’une librairie)
>>> import sys # importer tout un module
>>> from foo import bar # n’importe pas tout le module foo
# mais seulement bar
>>> sys.path # import cherche les modules dans ces repertoires
['', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2',
'/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages',
'/usr/lib/python2.5/site-packages/Numeric', '/usr/lib/python2.5/site-packages/gst-
0.10', '/var/lib/python-support/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0',
'/var/lib/python-support/python2.5/gtk-2.0', '/usr/lib/site-python']
26. Un package est un module contenant d’autres modules. Les modules d’un package
peuvent être des sous-packages, ce qui donne une structure arborescente.
Enrésumé,un package est simplement un répertoire qui contient des modules et un fichier
__init__.py
décrivant l’arborescence du package.
pip est un gestionnaire de paquets utilisé pour installer et gérer
des paquets écrits en Python. De nombreux paquets peuvent
être trouvés sur le dépôt Python Package Index (PyPI).
Packages