Introduction à on
Historique
• Langage relativement récent, développé au
début des années 1990 par Guido Von
Rossum (GvR)
•Statut : BDFL (Benevolent Dïctator For Life)
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
3 LOAD FAST
6 BINARY ADD
7 LOAD CONST
10 BINARY ADD
11 RETURN VALUE
0
(a)
1
(b)
1 (42)
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
Principales caractéristiques
— Typage dynamique (à l'exécution), pas de
type checking
—Support des exceptions
• Exemple :
>>> def fun():
c = ‘chaine’
return c +
42
>>> fun()
Traceback (most
recent call last):
File "<stdin>", line 1, in <moduIe>
File "<stdin>", line 2, in fun
Principales caractéristiques
• Introspection
— Examiner ses propres structures à
l'exécution (attributs, méthodes, parents,
type, ...)
• Builtins : type(), dir(), locals(), globals(),
getattr(),...
• Se modifier soi-même
—Modifier ses propres structures
• cf. exemple plus Ioin (diapo. sur les Classes)
• Exemple :
def f(a,b=3):
if a:
return a + b
Fonctions
f(2)
f(2, 42)
f(0)
f(0,42)
# retourne 5
# retourne 44
# retourne None
# retourne None
• Définition d'une fonction par ’def’
• Accepte des arguments par défauts
• Ne peut-être surchargée qu'avec ce mécanisme
ncti
ns
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
Surprenant au premier abord
—N'encourage pas l'utilisation d'accesseurs (regarder du côté
des descrïptors)
—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 l'argument self
-
-”
”
” Clas”ses
• Pas de notions de classe abstraite
• Héritage multiple (à la c++), depth-fïrst,
left- to-right
• Les méthodes sont toutes virtuelles
• Attrïbuts de classe
• Méthodes statiques
• Fonctïon super(), pour référer à la classe
parente
• Exemple 1 :
class Test(object):
t
CCt
mmentaire' t
def init (self, a):
self. a = a
def meth(self):
return self. a * 42
def Astra(self):
return str(self.
a)
print 'type de Test:',
type(Test)
c = Test(2)
print tappeI de la
methode
str
sundae:”/Desktop$ python test.py
type de Test: <type 'type’>
appel de la methode str
(): 2 type de c:
<cIass ' main .Test'>
attributs de c: [’ class ’,
delattr ', ' dict ’, '
doc
3
getattribute ', ' hash ’, init ’, ' module t new
reduce ', ' reduce ex ’, repr ', ' setattr ’,
str
weakref ', a', 'meth']
appel de methode:
84 nouvel attribut: 42
introspection: 84
— Que contient
l‘attribut
• Exemple 2 (héritage, self-modication):
class A(object):
pass
class 8(A):
pass
class C(object):
pass
print B. bases #
(1) B. bases +=
(C,) print B.
bases # (2)
Résultats :
(<cIass main .A>,) #
(1) (<cIass main .A>,
<cIass
main .C>) # (2)
• Exemple 3 (surcharge d'opérateurs):
class Mylnt(object):
del init
(self, i):
self.i = i
def paddy(self,
rhs):
return Mylnt(self.i
+ rhs.i)
def astro(self):
return str(self.i)
un = MyInt(1)
deux = MyInt(2)
trois = un + deux
print trois
sundae:"/Desktop$ python myint.py
• Conteneur séquentiel non
mutable
• Ensemble ordonné d'éléments
—Pas forcément constants
—Exemples :
a (1,2,3)
a[1]
a[0] 4
# instancie un nouveau tuple
# retourne 2
# interdit
a..append(42) # faux
b. a + (4,) # recopie complète de a
dans b
• Conteneur séquentiel mutable
• Exemple
>>> I = [1,42] # liste de 2 éléments
# Rem: le type des élts n'est pas forcément
homogène
>>> len(I) # longeur de la liste
2
>>> I.append(4) # insérer un élément à la fin de la liste
>>> I
[1, 42, 4]
>>> I.sort() # ordonner la liste,
# compare les élts 2 à 2, avec la méthode
emp
()
>>> I d pour éviter que I ne soit modifiée, utiliser sorted()
Liste
>>> 1[o:z] # retourne une sous-
liste
1 41
>>> 1[-i] # plus efficace que l[len(l)-i]
4
>>> 1.remove(4) *
* retirer un élt se base sur l'op d'égalité structurelle
# au travers de la méthode eq ()
>>> del 1[o] # suppression par position
>> l
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
>>> del d[2] # supprimer un élément en fonction de sa clef
>> d
Î*• 3• 4]
>>> d.values() # retourne la liste des valeurs
>>> d.items() # retourne la liste des couples (clef, value)
1(' 1') (3 '3') (4 4)s
>>> d 6] # retourne une exception en cas de clef erronée
Tracebacl‹ (most recent call last):
File "<stdin>", line i, in <module>
KeyError: 6
>>> d.get(6) # retourne None
icti nnaire
”
>>> d.get(4) # ou la valeur si la clef est correcte
'4‘
>>> d.iteritems() # retourne un itérateur sur les couples d'items
<dictionary-itemiterator object at oxb7sb976o>
for k,v in d.iteritems(): # itérer sur les couples d'items, ordre des
éléments non garanti
print k, v
11
33
4 4
>>> sorted(d.iterkeys()) # liste ordonnée des lieys
[*• *• 3]
>>> d.clear() # réinitialiser le dictionnaire
Dictionnair
eChangements prévus dans PythOn 3
• Inspirés de Java
• Ne plus retourner une liste après un appel à .values(),
.items(), .keys() mais une view
• Plus léger, n'est 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(),...
-
-”
”
” Autre's
con”teneurs
• 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(ï) for ï ïn range(1,6)]
# list comprehension
['1', '2', '3', '4', '5']
Contene-urs
• 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
>>> I = [1,2,3]; ll = I; ll[1] = 42;
I [1, 42, 3]
• La recopie en
profondeur
doit être explicite
>>> I = [1,2,3]; II = I[:]; II[1] =
42; I
(1, 2, 3]
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
—
—I
——
—
—
” Iterateurs
• Classe dont les instances sont itérables
class MyList(object):
def init
(self, I):
self.I = I
self.indeX = 0
def
iter
(self):
return self
def neKt(self):
if self.index
len(self.I):
raise
Stoplteratio
n
—
—
1
——
—
—
” Iterateurs
• Itérer (consommer)
—Méthode classique
for i in
MyList([0,1,2]):
print I
—Strictement
equivalent à
(principe réalisé
en ïnterne)
it = iter(MyList([0,1,2])) # délégue à
iter () while True:
try:
print it.neKt()
eKcept Stoplteration:
break
—
• 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 l'exception
print err # affiche le message d'erreur
# peut attraper d'autres types d'exceptions
# avec de nouvelles clauses ‘except’
else:
# exécutée si la partie critique n'a
pas lever une exception
finally:
Exceptions
Exce
ns
Hiérachies des exceptions (Python • s)
BaseException
- Keyboardlnterrupt
- SystemExit
Exception
(all other
current
built in
exceptio
ns)
• Importer un module (équivalent
d'une
librairïe)
>>> import sys # importer tout un module
>>> sys.path # import cherche les modules dans ces
répertoires
[", '/usr/Iib/python25.zip', '/usr/Iib/python2.5', '/usr/Iib/python2.5/plat-linux2',
'/usr/Iib/python2.5/Iib-tk', '/usr/Iib/python2.S/Iib-dynIoad',
'/usr/local/Iib/python2.5/site-packages', '/usr/Iib/python2.5/site-packages',
'/usr/Iib/python2.5/site-packages/Numeric', '/usr/Iib/python2.S/site-packages/gst-0.10',
'/var/Iib/python-support/python2.5', '/usr/Iib/python2.5/site-packages/gtk-2.0',
'/var/Iib/python-support/python2.5/gtk-2.0', '/usr/Iib/site-python']
>>> from foo import bar # n'importe pas tout le module foo
# mais seulement bar
• Import relatifs (fonctïonnalïté introduïte dans python 2.5)
• La Iïbrairie standart est installée dans :
— /usr/Iib/python2.(3,4,5)
• Les modules non standarts :
- /usr/Iib/python2.(3,4,5}/site-packages/
• Outils pour construire des packages
(équivalent de
ant pour java)
— distutils, Python Eggs (produit .egg)
-
-”
”
” Domaines””avancés
• Appeler du code C à partir du code python
—Améliorer les performances de sections critiques
—S'interfacer 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 maïs est assez performant
Domaines avancés
Pour la culture, çà existe
—Meta-classes
—Programmation fonctionnelle
• Lambda (fonction anonyme)
>>> fiIter(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.pa
rtial(add, y—
1)
>>> plus
un(41)
42
Domaines avancés
• Générateurs (Python z 4, 2.s)
• Mot clef‘yield'
• Décorateurs (Python z.4)
@decorator
def foo(...)
• Instruction ‘with’ (Python 2 )
• Particulièrement utile pour la manipulation des fichiers et pour
les locks
• Personnalisable pour ses propres objets
• Le module itertools
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 écrït pour convertïr
les incompatibilités contenues dans les anciens
codes
—...mais pas trop (éviter l'effet Perl 6)
Autres interpréteurs Python
• Version officielle : CPython (
—Financé par Google (humour )
• Pypy : python en python (
—Financé par l'UE
• IronPython : interpréteur en C# pour Visual .net
—Financé par Satan (humour ?)
• JPython : interpréteur python en Java
()
• YouTube.com est écrit en Python
• Python est un des 3 langages officiels
chez Google (avec Java et C++)
• Django est capable de rivalïser 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, ...
• 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 l'idéal commencer par çà): Learning Python (M. Lutz)
• Répertoire de packages (plutôt que de coder tout un module soi-même):
chaque
• PEPs (mine d'information):
nouvel idiome du langage fait l'objet préalable d'un draft
• Wiki (moyen):
• Autres sources . mailing lists, blog de GvR, et des autres core
developpeurs
Que ues 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 :

1130048922.pptx cours Python en powerpoint

  • 1.
  • 2.
    Historique • Langage relativementrécent, développé au début des années 1990 par Guido Von Rossum (GvR) •Statut : BDFL (Benevolent Dïctator For Life)
  • 3.
    Principales caractéristiques • Langageinterpré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 3 LOAD FAST 6 BINARY ADD 7 LOAD CONST 10 BINARY ADD 11 RETURN VALUE 0 (a) 1 (b) 1 (42)
  • 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
  • 5.
    Principales caractéristiques — Typagedynamique (à l'exécution), pas de type checking —Support des exceptions • Exemple : >>> def fun(): c = ‘chaine’ return c + 42 >>> fun() Traceback (most recent call last): File "<stdin>", line 1, in <moduIe> File "<stdin>", line 2, in fun
  • 6.
    Principales caractéristiques • Introspection —Examiner ses propres structures à l'exécution (attributs, méthodes, parents, type, ...) • Builtins : type(), dir(), locals(), globals(), getattr(),... • Se modifier soi-même —Modifier ses propres structures • cf. exemple plus Ioin (diapo. sur les Classes)
  • 7.
    • Exemple : deff(a,b=3): if a: return a + b Fonctions f(2) f(2, 42) f(0) f(0,42) # retourne 5 # retourne 44 # retourne None # retourne None • Définition d'une fonction par ’def’ • Accepte des arguments par défauts • Ne peut-être surchargée qu'avec ce mécanisme
  • 8.
    ncti ns Pas de déclarationde 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
  • 9.
    Surprenant au premierabord —N'encourage pas l'utilisation d'accesseurs (regarder du côté des descrïptors) —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 l'argument self
  • 10.
    - -” ” ” Clas”ses • Pasde notions de classe abstraite • Héritage multiple (à la c++), depth-fïrst, left- to-right • Les méthodes sont toutes virtuelles • Attrïbuts de classe • Méthodes statiques • Fonctïon super(), pour référer à la classe parente
  • 11.
    • Exemple 1: class Test(object): t CCt mmentaire' t def init (self, a): self. a = a def meth(self): return self. a * 42 def Astra(self): return str(self. a) print 'type de Test:', type(Test) c = Test(2) print tappeI de la methode str
  • 12.
    sundae:”/Desktop$ python test.py typede Test: <type 'type’> appel de la methode str (): 2 type de c: <cIass ' main .Test'> attributs de c: [’ class ’, delattr ', ' dict ’, ' doc 3 getattribute ', ' hash ’, init ’, ' module t new reduce ', ' reduce ex ’, repr ', ' setattr ’, str weakref ', a', 'meth'] appel de methode: 84 nouvel attribut: 42 introspection: 84 — Que contient l‘attribut
  • 13.
    • Exemple 2(héritage, self-modication): class A(object): pass class 8(A): pass class C(object): pass print B. bases # (1) B. bases += (C,) print B. bases # (2) Résultats : (<cIass main .A>,) # (1) (<cIass main .A>, <cIass main .C>) # (2)
  • 14.
    • Exemple 3(surcharge d'opérateurs): class Mylnt(object): del init (self, i): self.i = i def paddy(self, rhs): return Mylnt(self.i + rhs.i) def astro(self): return str(self.i) un = MyInt(1) deux = MyInt(2) trois = un + deux print trois sundae:"/Desktop$ python myint.py
  • 15.
    • Conteneur séquentielnon mutable • Ensemble ordonné d'éléments —Pas forcément constants —Exemples : a (1,2,3) a[1] a[0] 4 # instancie un nouveau tuple # retourne 2 # interdit a..append(42) # faux b. a + (4,) # recopie complète de a dans b
  • 16.
    • Conteneur séquentielmutable • Exemple >>> I = [1,42] # liste de 2 éléments # Rem: le type des élts n'est pas forcément homogène >>> len(I) # longeur de la liste 2 >>> I.append(4) # insérer un élément à la fin de la liste >>> I [1, 42, 4] >>> I.sort() # ordonner la liste, # compare les élts 2 à 2, avec la méthode emp () >>> I d pour éviter que I ne soit modifiée, utiliser sorted()
  • 17.
    Liste >>> 1[o:z] #retourne une sous- liste 1 41 >>> 1[-i] # plus efficace que l[len(l)-i] 4 >>> 1.remove(4) * * retirer un élt se base sur l'op d'égalité structurelle # au travers de la méthode eq () >>> del 1[o] # 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 (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
  • 19.
    >>> del d[2]# supprimer un élément en fonction de sa clef >> d Î*• 3• 4] >>> d.values() # retourne la liste des valeurs >>> d.items() # retourne la liste des couples (clef, value) 1(' 1') (3 '3') (4 4)s >>> d 6] # retourne une exception en cas de clef erronée Tracebacl‹ (most recent call last): File "<stdin>", line i, in <module> KeyError: 6 >>> d.get(6) # retourne None
  • 20.
    icti nnaire ” >>> d.get(4)# ou la valeur si la clef est correcte '4‘ >>> d.iteritems() # retourne un itérateur sur les couples d'items <dictionary-itemiterator object at oxb7sb976o> for k,v in d.iteritems(): # itérer sur les couples d'items, ordre des éléments non garanti print k, v 11 33 4 4 >>> sorted(d.iterkeys()) # liste ordonnée des lieys [*• *• 3] >>> d.clear() # réinitialiser le dictionnaire
  • 21.
    Dictionnair eChangements prévus dansPythOn 3 • Inspirés de Java • Ne plus retourner une liste après un appel à .values(), .items(), .keys() mais une view • Plus léger, n'est 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.
    - -” ” ” Autre's con”teneurs • Conteneursé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(ï) for ï ïn range(1,6)] # list comprehension ['1', '2', '3', '4', '5']
  • 23.
    Contene-urs • Les conteneurspeuvent ê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 >>> I = [1,2,3]; ll = I; ll[1] = 42; I [1, 42, 3] • La recopie en profondeur doit être explicite >>> I = [1,2,3]; II = I[:]; II[1] = 42; I (1, 2, 3]
  • 24.
    Itérateurs • Tous lesconteneurs 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
  • 25.
    — —I —— — — ” Iterateurs • Classedont les instances sont itérables class MyList(object): def init (self, I): self.I = I self.indeX = 0 def iter (self): return self def neKt(self): if self.index len(self.I): raise Stoplteratio n
  • 26.
    — — 1 —— — — ” Iterateurs • Itérer(consommer) —Méthode classique for i in MyList([0,1,2]): print I —Strictement equivalent à (principe réalisé en ïnterne) it = iter(MyList([0,1,2])) # délégue à iter () while True: try: print it.neKt() eKcept Stoplteration: break —
  • 27.
    • Lever uneexception 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 l'exception print err # affiche le message d'erreur # peut attraper d'autres types d'exceptions # avec de nouvelles clauses ‘except’ else: # exécutée si la partie critique n'a pas lever une exception finally: Exceptions
  • 28.
    Exce ns Hiérachies des exceptions(Python • s) BaseException - Keyboardlnterrupt - SystemExit Exception (all other current built in exceptio ns)
  • 29.
    • Importer unmodule (équivalent d'une librairïe) >>> import sys # importer tout un module >>> sys.path # import cherche les modules dans ces répertoires [", '/usr/Iib/python25.zip', '/usr/Iib/python2.5', '/usr/Iib/python2.5/plat-linux2', '/usr/Iib/python2.5/Iib-tk', '/usr/Iib/python2.S/Iib-dynIoad', '/usr/local/Iib/python2.5/site-packages', '/usr/Iib/python2.5/site-packages', '/usr/Iib/python2.5/site-packages/Numeric', '/usr/Iib/python2.S/site-packages/gst-0.10', '/var/Iib/python-support/python2.5', '/usr/Iib/python2.5/site-packages/gtk-2.0', '/var/Iib/python-support/python2.5/gtk-2.0', '/usr/Iib/site-python'] >>> from foo import bar # n'importe pas tout le module foo # mais seulement bar • Import relatifs (fonctïonnalïté introduïte dans python 2.5)
  • 30.
    • La Iïbrairiestandart est installée dans : — /usr/Iib/python2.(3,4,5) • Les modules non standarts : - /usr/Iib/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 • Appelerdu code C à partir du code python —Améliorer les performances de sections critiques —S'interfacer 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 maïs est assez performant
  • 32.
    Domaines avancés Pour laculture, çà existe —Meta-classes —Programmation fonctionnelle • Lambda (fonction anonyme) >>> fiIter(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.pa rtial(add, y— 1) >>> plus un(41) 42
  • 33.
    Domaines avancés • Générateurs(Python z 4, 2.s) • Mot clef‘yield' • Décorateurs (Python z.4) @decorator def foo(...) • Instruction ‘with’ (Python 2 ) • 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 écrït pour convertïr les incompatibilités contenues dans les anciens codes —...mais pas trop (éviter l'effet Perl 6)
  • 35.
    Autres interpréteurs Python •Version officielle : CPython ( —Financé par Google (humour ) • Pypy : python en python ( —Financé par l'UE • IronPython : interpréteur en C# pour Visual .net —Financé par Satan (humour ?) • JPython : interpréteur python en Java ()
  • 36.
    • YouTube.com estécrit en Python • Python est un des 3 langages officiels chez Google (avec Java et C++) • Django est capable de rivalïser 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.
    • Plonger danspython (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 l'idéal commencer par çà): Learning Python (M. Lutz) • Répertoire de packages (plutôt que de coder tout un module soi-même): chaque • PEPs (mine d'information): nouvel idiome du langage fait l'objet préalable d'un draft • Wiki (moyen): • Autres sources . mailing lists, blog de GvR, et des autres core developpeurs
  • 38.
    Que ues 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 :