Upload
olivier-rovellotti
View
37
Download
0
Embed Size (px)
Citation preview
Session 2/3
Olivier Rovellotti
Python
AUTRES TYPES
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
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']
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'}
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éeTraceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 6>>> d.get(6) # retourne None
AUTRES TYPES
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
Itérateurs
• Classe dont les instances sont itérablesclass 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
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 :012
– Remarque : faire un itérateur infini sans StopIteration
FONCTION
Fonctions• Définition d’une fonction par ‘def’
def f(a,b=3): if a: return a + b
f(2) # retourne 5f(2, 42) # retourne 44f(0) # retourne Nonef(0,42) # retourne None
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
CLASSE
Classes
• Exemple 2 (héritage, self-modication) :class A(object): passclass B(A): passclass 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)
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__():', cprint 'type de c:', type(c)print 'attributs de c:', dir(c)print 'appel de methode:', c.meth()c.nouvel_attribut = 42print 'nouvel attribut::', c.nouvel_attributprint 'introspection:', getattr(c,'meth')
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
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 + deuxprint trois
sundae:~/Desktop$ python myint.py3
Modules
• 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.
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']
PACKAGES
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