ns python 2
TRANSCRIPT
![Page 1: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/1.jpg)
Session 2/3
Olivier Rovellotti
Python
![Page 2: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/2.jpg)
![Page 3: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/3.jpg)
![Page 4: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/4.jpg)
AUTRES TYPES
![Page 5: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/5.jpg)
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
![Page 6: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/6.jpg)
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']
![Page 7: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/7.jpg)
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'}
![Page 8: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/8.jpg)
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
![Page 9: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/9.jpg)
AUTRES TYPES
![Page 10: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/10.jpg)
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
![Page 11: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/11.jpg)
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
![Page 12: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/12.jpg)
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
![Page 13: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/13.jpg)
FONCTION
![Page 14: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/14.jpg)
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
![Page 15: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/15.jpg)
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
![Page 16: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/16.jpg)
CLASSE
![Page 17: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/17.jpg)
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)
![Page 18: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/18.jpg)
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')
![Page 19: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/19.jpg)
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
![Page 20: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/20.jpg)
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
![Page 21: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/21.jpg)
Modules
![Page 22: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/22.jpg)
• 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.
![Page 23: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/23.jpg)
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']
![Page 24: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/24.jpg)
![Page 25: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/25.jpg)
PACKAGES
![Page 26: Ns python 2](https://reader031.vdocuments.site/reader031/viewer/2022020119/5a655b177f8b9a931a8b46d1/html5/thumbnails/26.jpg)
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