Python - PowerPoint PPT Presentation

About This Presentation
Title:

Python

Description:

Langage relativement r cent, d velopp au d but des ann es 1990 par Guido Von Rossum (GvR) ... Accepte des arguments par d fauts. Ne peut- tre surcharg e qu'avec ce ... – PowerPoint PPT presentation

Number of Views:224
Avg rating:3.0/5.0
Slides: 39
Provided by: seb100
Learn more at: http://seb.dbzteam.org
Category:
Tags: accepte | python

less

Transcript and Presenter's Notes

Title: Python


1
Introduction à Python
sebastien.martini_at_gmail.com 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
  • gtgtgt def fun(a, b)
  • ... return a b 42
  • gtgtgt 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 gt 42
  • pass
  • else
  • print bar
  • Utiliser un mode python
  • Dynamique
  • Pas de déclaration de variables
  • Exemple
  • gtgtgt 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
  • gtgtgt def fun()
  • c chaine
  • ... return c 42
  • ...
  • gtgtgt fun()
  • Traceback (most recent call last)
  • File "ltstdingt", line 1, in ltmodulegt
  • File "ltstdingt", 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,b3)
  • 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 lttype 'type'gt
  • appel de la methode __str__() 2
  • type de c ltclass '__main__.Test'gt
  • 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
  • (ltclass __main__.Agt,) (1)
  • (ltclass __main__.Agt, ltclass __main__.Cgt) (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
  • a1 retourne 2
  • a0 4 interdit
  • a.append(42) faux
  • b a (4,) recopie complète de a dans b

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

17
Liste
  • gtgtgt l02 retourne une sous-liste
  • 1, 4
  • gtgtgt l-1
  • 1, 4
  • gtgtgt l-1 plus efficace que llen(l)-1
  • 4
  • gtgtgt l.remove(4) retirer un élt se base sur lop
    d'égalité structurelle
  • au travers de la
    méthode __eq__()
  • gtgtgt del l0 suppression par position
  • gtgtgt l

18
Dictionnaire
  • Conteneur associatif
  • Exemple
  • gtgtgt 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)
  • gtgtgt d
  • 1 '1', 2 '2', 3 '3'
  • gtgtgt 1 in d test d'appartenance
  • True
  • gtgtgt d4 '4' insérer un élément
  • gtgtgt d
  • 1 '1', 2 '2', 3 '3', 4 '4'

19
Dictionnaire
  • gtgtgt del d2 supprimer un élément en fonction
    de sa clef
  • gtgtgt d
  • 1 '1', 3 '3', 4 '4'
  • gtgtgt d.keys() retourne la liste des clefs (peut
    être très coûteux)
  • 1, 3, 4
  • gtgtgt d.values() retourne la liste des valeurs
  • '1', '3', '4'
  • gtgtgt d.items() retourne la liste des couples
    (clef, value)
  • (1, '1'), (3, '3'), (4, '4')
  • gtgtgt d6 retourne une exception en cas de clef
    erronée
  • Traceback (most recent call last)
  • File "ltstdingt", line 1, in ltmodulegt
  • KeyError 6
  • gtgtgt d.get(6) retourne None

20
Dictionnaire
  • gtgtgt d.get(4) ou la valeur si la clef est
    correcte
  • '4
  • gtgtgt d.iteritems() retourne un itérateur sur
    les couples d'items
  • ltdictionary-itemiterator object at 0xb79b9760gt
  • gtgtgt for k,v in d.iteritems() itérer sur les
    couples d'items, ordre des éléments non garanti
  • ... print k, v
  • 1 1
  • 3 3
  • 4 4
  • gtgtgt sorted(d.iterkeys()) liste ordonnée des
    keys
  • 1, 2, 3
  • gtgtgt d.clear() réinitialiser le dictionnaire
  • gtgtgt 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
  • gt 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)
  • gtgtgt 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
  • gtgtgt l 1,2,3 ll l ll1 42 l
  • 1, 42, 3
  • La recopie en profondeur doit être explicite
  • gtgtgt l 1,2,3 ll l ll1 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.lself.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
  • 0
  • 1
  • 2
  • 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)
  • gtgtgt import sys importer tout un module
  • gtgtgt 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/l
    ib-dynload', '/usr/local/lib/python2.5/site-packag
    es', '/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'
  • gtgtgt 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)
  • gtgtgt filter(lambda x True if x gt 42 else False,
    1,84,-42,45,42)
  • 84, 45
  • Application partielle (Python 2.5)
  • def add(x,y)
  • return xy
  • plus_un
    functools.partial(add, y1)
  • gtgtgt 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 2.4)
  • _at_decorator
  • 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.or
    g)
  • Financé par Google (humour ? )
  • Pypy python en python (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/)

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) http//www.diveintopython.org/
  • Tutoriel (notions de bases) http//docs.python.o
    rg/tut/tut.html
  • Documentation de la bibliothèque standart
    (ressource vitale) http//docs.python.org/lib/lib
    .html
  • Recettes (contient de bonnes surprises)
    http//aspn.activestate.com/ASPN/Python/Cookbook/
  • 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) http//python.org/pypi
  • PEPs (mine dinformation) http//www.python.org/
    dev/peps/ chaque nouvel idiome du langage fait
    lobjet préalable dun draft
  • Wiki (moyen) http//wiki.python.org/moin/
  • Autres sources mailing lists, blog de GvR, et
    des autres core developpeurs

38
Quelques PEPs utiles
  • Ecrire du code à la norme officielle
    http//www.python.org/dev/peps/pep-0008/
  • WSGI (Web Server Gateway Interface)
    http//www.python.org/dev/peps/pep-0333/
  • Eléments du langage à éviter pour rester
    compatible avec les anciennes versions de CPython
    http//www.python.org/dev/peps/pep-0291/
  • Peps traitant des nouveautés dans python 2.5
    http//docs.python.org/whatsnew/whatsnew25.html
  • Architecture interne du compilateur
    http//www.python.org/dev/peps/pep-0339/
Write a Comment
User Comments (0)
About PowerShow.com