Ns python 2

27
Session 2/3 Olivier Rovellotti Python

Transcript of Ns python 2

Page 1: Ns python 2

Session 2/3

Olivier Rovellotti

Python

Page 2: Ns python 2
Page 3: Ns python 2
Page 4: Ns python 2

AUTRES TYPES

Page 5: Ns python 2

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

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

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

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

AUTRES TYPES

Page 10: Ns python 2

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

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

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

FONCTION

Page 14: Ns python 2

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

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

CLASSE

Page 17: Ns python 2

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

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

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

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

Modules

Page 22: Ns python 2

• 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

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
Page 25: Ns python 2

PACKAGES

Page 26: Ns python 2

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

Page 27: Ns python 2

Twitter: @orovellotti www.natural-solutions.eu

Merci

[email protected]