La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Introduction à Python 14/03/2007.

Présentations similaires


Présentation au sujet: "Introduction à Python 14/03/2007."— Transcription de la présentation:

1 Introduction à Python 14/03/2007

2 Historique Langage relativement récent, développé au début des années 1990 par Guido Von Rossum (GvR) Statut : BDFL (Benevolent Dictator For Life)

3 Principales caractéristiques Langage interprété – Exécution : – python mon_source.py – Mode interpréteur – Génére du bytecode (langage intermédiaire) ex:.pyc >>> def fun(a, b):... return a + b + 42 >>> dis.dis(fun) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BINARY_ADD 7 LOAD_CONST 1 (42) 10 BINARY_ADD 11 RETURN_VALUE

4 Principales caractéristiques Orienté objet (pas pur ou du moins pas en apparence) Les espaces sont significatifs – Plus besoin de ; { } Exemple : If a > 42 : pass else print bar –Utiliser un mode python Dynamique – Pas de déclaration de variables Exemple : >>> a = 42; print a; a = 'foo'; print a ; 42 foo

5 Principales caractéristiques – Typage dynamique (à lexécution), pas de type checking – Support des exceptions Exemple : >>> def fun(): … c = chaine... return c >>> fun() Traceback (most recent call last): File " ", line 1, in File " ", line 2, in fun TypeError: cannot concatenate 'str' and 'int' objects

6 Principales caractéristiques Introspection – Examiner ses propres structures à lexécution (attributs, méthodes, parents, type, …) Builtins : type(), dir(), locals(), globals(), getattr(),… Se modifier soi-même – Modifier ses propres structures cf. exemple plus loin (diapo. sur les Classes)

7 Fonctions Exemple : 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 Définition dune fonction par def Accepte des arguments par défauts Ne peut-être surchargée quavec ce mécanisme

8 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 lobjet None par défaut (ou en cas de return sans argument) Une fonction peut être imbriquée dans une autre

9 Classes Surprenant au premier abord – Nencourage pas lutilisation daccesseurs (regarder du côté des descriptors) – Pas de qualifieurs (private, protected) tout est public (en simplifiant), sorte de private avec __mymeth() – Pas de destructeur (en simplifiant) – Les méthodes « spéciales » sont encadrées par deux underscores Exemple de constructeur : def __init__(self): Pass – Nécessité de largument self

10 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

11 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')

12 Classes sundae:~/Desktop$ python test.py type de Test: appel de la methode __str__(): 2 type de c: attributs de c: ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_a', 'meth'] appel de methode: 84 nouvel attribut: 42 introspection: 84 –Que contient lattribut __doc__ ?

13 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 : (,) # (1) (, ) # (2)

14 Classes Exemple 3 (surcharge dopé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

15 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

16 Liste Conteneur séquentiel mutable Exemple >>> l = [1,42] # liste de 2 éléments # Rem: le type des élts n'est pas forcément homogéne >>> len(l) # longeur de la liste 2 >>> l.append(4) # insérer un élément à la fin de la liste >>> l [1, 42, 4] >>> l.sort() # ordonner la liste, # compare les élts 2 à 2, avec la méthode __cmp__() >>> l # pour éviter que l ne soit modifiée, utiliser sorted() [1, 4, 42] >>> l.pop() # retire et retourne le dernier élément de la liste

17 Liste >>> l[0:2] # retourne une sous-liste [1, 4] >>> l[:-1] [1, 4] >>> l[-1] # plus efficace que l[len(l)-1] 4 >>> l.remove(4) # retirer un élt se base sur lop d'égalité structurelle # au travers de la méthode __eq__() >>> del l[0] # suppression par position >>> l []

18 Dictionnaire Conteneur associatif Exemple >>> d = {1:'1', 3:'3', 2:'2'} # instancier un dictionnaire, la clef doit # être un objet constant (cest son hash # qui détermine sa valeur dindex) >>> 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'}

19 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 " ", line 1, in KeyError: 6 >>> d.get(6) # retourne None

20 Dictionnaire >>> d.get(4) # ou la valeur si la clef est correcte '4 >>> d.iteritems() # retourne un itérateur sur les couples d'items >>> for k,v in d.iteritems(): # itérer sur les couples d'items, ordre des éléments non garanti... print k, v >>> sorted(d.iterkeys()) # liste ordonnée des keys [1, 2, 3] >>> d.clear() # réinitialiser le dictionnaire >>> d {}

21 Dictionnaire Changements prévus dans Python 3.0 Inspirés de Java Ne plus retourner une liste après un appel à.values(),.items(),.keys() mais une view Plus léger, nest pas un itérateur Permet de retirer un élément (pas d'ajouter ?) Supporte l'itération => les méthodes retournant un iterateur seront retirées iteritems(),...

22 Autres conteneurs Conteneur séquentiel déléments uniques non ordonnés – Classe Set (contenue dans le module sets) Conteneur FIFO synchronisé (thread safe) – Classe Queue Liste comprehension (sera implémenté par un generator dans Python 3.0) >>> [str(i) for i in range(1,6)] # list comprehension ['1', '2', '3', '4', '5']

23 Conteneurs Les conteneurs peuvent être imbriqués Par efficacité les conteneurs manipulent des pointeurs sur les objets insérés En cas de copie, seule une copie superficielle (shallow copy) est souvent effectuée >>> l = [1,2,3]; ll = l; ll[1] = 42; l [1, 42, 3] La recopie en profondeur doit être explicite >>> l = [1,2,3]; ll = l[:]; ll[1] = 42; l [1, 2, 3] Dans le cas dobjets complexes, la recopie est à la charge du développeur

24 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 dun élément sur une séquence itérée invalide silencieusement litérateur

25 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

26 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 : – Remarque : faire un itérateur infini sans StopIteration

27 Exceptions Lever une exception raise Exception() Attraper une exception (à la manière Python 2.5) try: # code susceptible de déclencher une exception except Exception(), err: # ou tout type hérité de Exception # code de traitement de lexception print err # affiche le message derreur # peut attraper dautres types dexceptions # avec de nouvelles clauses except else: # exécutée si la partie critique na pas lever une exception finally: # partie exécutée dans tous les cas

28 Exceptions Hiérachies des exceptions (Python 2.5) BaseException |- KeyboardInterrupt |- SystemExit |- Exception |- (all other current built-in exceptions)

29 Modules Importer un module (équivalent dune librairie) >>> import sys # importer tout un module >>> sys.path # import cherche les modules dans ces répertoires ['', '/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'] >>> from foo import bar # nimporte pas tout le module foo # mais seulement bar Import relatifs (fonctionnalité introduite dans python 2.5)

30 Modules La librairie standart est installée dans : – /usr/lib/python2.{3,4,5} Les modules non standarts : – /usr/lib/python2.{3,4,5}/site-packages/ Outils pour construire des packages (équivalent de ant pour java) – distutils, Python Eggs (produit.egg)

31 Domaines avancés Appeler du code C à partir du code python – Améliorer les performances de sections critiques – Sinterfacer avec des librairies C Comment créer le « glue » code ? – « à la main » – Utiliser un générateur de code : swig Génère beaucoup de code mais est assez performant

32 Domaines avancés Pour la culture, çà existe – Meta-classes – Programmation fonctionnelle Lambda (fonction anonyme) >>> filter(lambda x: True if x > 42 else False, [1,84,-42,45,42]) [84, 45] Application partielle (Python 2.5) def add(x,y): return x+y plus_un = functools.partial(add, y=1) >>> plus_un(41) 42 Fonctions : map, reduce, filter, sum, all, any, zip, enumerate

33 Domaines avancés Générateurs (Python 2.4, 2.5) Mot clef yield Décorateurs (Python def foo(…) […] Instruction with (Python 2.5) Particulièrement utile pour la manipulation des fichiers et pour les locks Personnalisable pour ses propres objets Le module itertools

34 Futur Court terme (06/07) : Python 2.6 – Continuité de la branche 2.x – Transition avec Python 3.0 (ajout de warnings) Moyen terme (06/08) : Python 3.0 – Changements incompatibles/importants Un outil (best effort) doit être écrit pour convertir les incompatibilités contenues dans les anciens codes – …mais pas trop (éviter leffet Perl 6)

35 Autres interpréteurs Python Version officielle : CPython (http://www.python.org)http://www.python.org – Financé par Google (humour ) Pypy : python en python (http://codespeak.net/pypy/)http://codespeak.net/pypy/ – Financé par lUE IronPython : interpréteur en C# pour Visual.net – Financé par Satan (humour ?) JPython : interpréteur python en Java (http://www.jython.org/)http://www.jython.org/

36 Propagande YouTube.com est écrit en Python Python est un des 3 langages officiels chez Google (avec Java et C++) Django est capable de rivaliser avec RoR Forte communauté, en particulier sous Linux, de nombreuses librairies, souvent de bons niveaux Utilisé pour les jeux, le calcul numérique, le dév. Web, la prog. système, …

37 Liens utiles Plonger dans python (peut donner des exemples de code à lire) : Tutoriel (notions de bases) : Documentation de la bibliothèque standart (ressource vitale): Recettes (contient de bonnes surprises) : Livres (dans lidéal commencer par çà) : Learning Python (M. Lutz) Répertoire de packages (plutôt que de coder tout un module soi-même) : PEPs (mine dinformation) : chaque nouvel idiome du langage fait lobjet préalable dun drafthttp://www.python.org/dev/peps/ Wiki (moyen) : Autres sources : mailing lists, blog de GvR, et des autres core developpeurs

38 Quelques PEPs utiles Ecrire du code à la « norme » officielle : WSGI (Web Server Gateway Interface) : Eléments du langage à éviter pour rester compatible avec les anciennes versions de CPython : Peps traitant des nouveautés dans python 2.5 : Architecture interne du compilateur :


Télécharger ppt "Introduction à Python 14/03/2007."

Présentations similaires


Annonces Google