S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1
Le La n g a g e P yt h o n
Yve s Le g r a n d g é r a r d
y lg @p p s .ju s s ie u .fr
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2
U n b r e f h is t o r iq u e
• Le la n g a g e P yt h o n a é t é c o n ç u p a r
Gu id o Va n Ro s s u m e n 1 9 9 0 a u
C WI a Am s t e r d a m
• C o n n a ît u n e la r g e d iffu s io n à
p a r t ir d e 1 9 9 4
• La d e r n iè r e ve r s io n : 2 .2 .1 d u
1 0 /0 4 /2 0 0 2
• Dis p o n ib le s u r d e n o m b r e u s e s
p la t e fo r m e s : U N IXs , DO S ,
Win d o w s , O S /2 , M a c O S ,…
• Le s it e o ffic ie l :
h t t p ://w w w
.p yt h o n .o r g /
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3
Q u e lq u e s c a r a c t é r is t iq u e s
(1 )
• La n g a g e i n t e rp ré t é (p lu s p r é c is é m e n t ,
c h a q u e p r o g r a m m e P yt h o n e s t c o m p ilé
e n « b y t e -c o d e » , c e t t e c o m p ila t io n
é t a n t e ffe c t u é e lo r s q u ’u n m o d u le e s t
im p o r t é o u e xé c u t é p o u r la 1 è r e fo is e t
c e c i d e m a n iè r e a u t o m a t iq u e )
• La n g a g e n o n t yp é
• La n g a g e d e « h a u t n ive a u »
• Ge s t io n a u t o m a t is é e d e la m é m o ir e
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4
Q u e lq u e s c a r a c t é r is t iq u e s
(2 )
• La n g a g e o ri e n t é o b je t
• P r o g r a m m a t io n m o d u l a i re : c la s s e s ,
m o d u le s , e xc e p t io n s
• In t é g r a t io n C e t C + +
• C h a r g e m e n t d yn a m iq u e d e s m o d u le s C
• Re c h a r g e m e n t d yn a m iq u e d e s m o d u le s
P yt h o n
• C o m b le le fo s s é e n t r e le s la n g a g e s d e
s c r ip t « t r a d it io n n e ls » e t le la n g a g e C
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5
U n p r e m ie r e xe m p le
# !/u s r /b in /e n v p yt h o n im p o r t s ys file = o p e n (s ys .a r g v[1 ], ' r ' ) w h ile 1 :lin e = file .r e a d lin e () if n o t lin e : b r e a k if lin e [0 ] = = ' # ' : p r in t lin e L’e xé c u t io n d e la c o m m a n d e : $ e x . p y s o u rc e . c > s o u rc e . p p e xt r a it le s lig n e s d u fic h ie r s o u rc e . c q u i c o m m e n c e n t p a r le c a r a c t è r e # e t le s r e d ir ig e ve r s le fic h ie r s o u rc e . p p .
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6
Q u e lq u e s é lé m e n t s d e
s yn t a xe
# !/u s r /b in /e n v p yt h o n
←
U n ix
# C e c i e s t u n c o m m e n t a ir e
x = 1
# Au t r e c o m m e n t a ir e
y = 2
;
p r in t z
# P lu s ie u r s
in s t r u c t io n s à la s u it e
if x < 1 a n d
\
# C o n t in u a t io n d e
lig n e
y != 3 :
p r in t ' O k '
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7
L’in d e n t a t io n (1 )
# !/u s r /b in /e n v p yt h o n im p o r t s ys file = o p e n (s ys .a r g v[1 ], ' r ' ) w h ile 1 :lin e = file .r e a d lin e () if n o t lin e : b r e a k if lin e [0 ] = = ' # ' : p r in t lin e • Il n ’y a p a s d e d é b u t e t d e fin d e b lo c c o m m e e n C o u e n P e r l p a r e xe m p le . • C ’e s t l’i n d e n t a t i o n q u i p e r m e t à P yt h o n d e r e p é r e r le s d é b u t s e t fin s d e b lo c s . • Ava n t a g e : c e la im p o s e u n s t yle d e p r o g r a m m a t io n p e r m e t t a n t u n e (r e )le c t u r e p lu s a is é e d u c o d e .
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 8
L’in d e n t a t io n (2 )
La n g a g e C if (c o n d 1 ()) if (c o n d 2 ()) { a c t io n (); fin is h (); } e ls e e r r o r (); Ré s o u t d e m a n iè r e é lé g a n t e le p r o b lè m e d u « e ls e p e n d a n t » , t o u jo u r s s o u r c e d ’e r r e u r s d iffic ile s à d é t e c t e r ! P y t h o n if c o n d 1 (): if c o n d 2 (): a c t io n () fin is h () e ls e : e r r o r ()S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 9
C o m m e n t e xé c u t e r P yt h o n
S c ri p t
# !/u s r /b in /e n v
p yt h o n
# Le s o u r c e h w .p y
p r in t ' H e llo Wo r ld ! '
M o d e i n t e ra c t i f
$ p yt h o n
> > > p r in t ' H e llo
Wo r ld ! '
He llo W o rld !
> > >
$ h w .p y
He llo W o rld !
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 0
Le s in s t r u c t io n s (1 )
a f f e c t a t i o n
$ p yt h o n
> > > x = 2
> > > y = ' c h a in e '
> > > z = 2 .0 e 6
> > > p r in t x, y, z
2 c h a in e 2 0 0 0 0 0 0 .0
> > >
> > > a = b = c = 1
> > > p r in t a , b , c
1 1 1
> > > x = 2
> > > x + = 1
# *, ^ ,
| ,…
> > > p r in t x
3
> > > x, y = 1 , 2
#
t u p le
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 1
Le s in s t r u c t io n s (2 )
(s t r u c t u r e s d e c o n t r ô le )
i f , e l i f , e l s e
# !/u s r /b in /e n v
p yt h o n
if x = = 1 :
p r in t ' va le u r d e x:
1 '
e lif x = = 2 :
p r in t ' va le u r d e x:
2 '
e ls e :
p r in t ' va le u r
in c o r r e c t e '
• C o m m e e n C , 0
≠
e t 0 s o n t
r e s p e c t ive m e n t
vra i e t f a u x
• Ain s i, u n e b o u c le
s a n s fin p e u t
s ’é c r ir e :
# !/u s r /b in /e n v
p yt h o n
w h ile 1 :
p r in t ' H e llo '
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 2
Le s in s t r u c t io n s (3 )
(s t r u c t u r e s d e c o n t r ô le )
n o t , a n d , o r
# !/u s r /b in /e n v p yt h o n
if n o t x = = 5 a n d (x < 1 0 o r x > = 2 0 ):
p r in t x
if 2 < = y < 1 0 :
# 2 < = y a n d y < 1 0
p r in t y
if x = = y = = z = = 0 :
# x = = 0 a n d y = =
0 a n d z = = 0
p r in t ’e r r e u r …’
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 3
Le s in s t r u c t io n s (4 )
(s t r u c t u r e s d e c o n t r ô le )
w h i l e
# !/u s r /b in /e n v p yt h o n i = 0 w h ile 1 : if i = = 1 0 : b r e a k e ls e : p r in t i i = i + 1f o r
$ p yt h o n > > > fo r i in r a n g e (2 ): . . . p r in t i 0 1 > > > fo r i in r a n g e (1 0 0 0 ): . . . p a s s # n e fa it r ie n > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 4
Le s n o m b r e s
x + y, x – y x * y, x / y, x % y -x, + x a b s (x), in t (x), lo n g (x) flo a t (x), d ivm o d (x), p o w (x, y) x | y, x ^ y, x & y, ~ x x < < n , x > > n 1 0 2 4 , 3 .1 4 , 0 1 7 7 0 xF F F E , 0 xa b c d , 1 0 0 0 L 1 0 e 1 2 , 6 .6 2 e -3 4Op é ra t i o n s
Co n s t a n t e s
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 5
Le s c h a în e s d e c a r a c t è r e s
(1 )
# !/u s r /b in /e n v p yt h o n x, y = 2 .1 , ' O n o b t ie n t :' p r in t 'x = % .2 f ' % x z = '% s % .2 f ' % (y, x) p r in t z + ' \n F in d u c a lc u l' • Le s c h a în e s s o n t d e s lis t e s p a r t ic u liè r e s • Le s o p é r a t e u r s + , *, [ ] ,… s o n t a in s i a p p lic a b le s a u x c h a în e s • C h a în e s fo r m a t é e s (fo r m a t p r e s q u e id e n t iq u e à c e lu i d e p rin t f e n C ) > > > s t r .p y x = 2 .1 0 On o b t ie n t : 2 .1 0 Fin d u c a lc u lS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 6
Le s c h a în e s d e c a r a c t è r e s
(2 )
> > > x = "C'e s t u n t it r e " > > > y = ' -' * (le n (x) + 4 ) > > > p r in t ' % s \n | % s | \n % s ' % (y, x, y) ---| C ' e s t u n t it re ---| ---> ---> ---> c = " " " # c h a în e d e c a r a c t è r e s s u r p lu s ie u r s lig n e s U n c o m m e n t a ir e s u r p lu s ie u r s lig n e s a ve c d e s b la n c s e t d e s t a b u la t io n s " " "S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 7
Le s s t r u c t u r e s d e d o n n é e s
(1 )
Li s t e s
$ p yt h o n > > > L = [' it e m ' , 1 , 5 .0 ] > > > L[2 ] 5 .0 > > > ' it e m ' in L 1 > > > fo r i in L: . . . p r in t i, it e m 1 5 .0 > > > fo r c in ' Bo n jo u r ' : . . . p r in t c , B o n j o u r # c h a în e = lis t e > > > L[0 :2 ] [' it e m ' , 1 ] > > > L[1 :] [1 , 5 .0 ] > > > L[-1 :] [5 .0 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 8
Le s s t r u c t u r e s d e d o n n é e s
(2 )
Li s t e s (s u it e )
> > > L = [' it e m ' , 1 , 5 .0 ] > > > le n (L) 3 > > > L[1 :le n (L)] [1 , 5 .0 ] > > > L[5 ] In d e x Erro r: lis t in d e x o u t o f ra n g e > > > L[-1 0 :1 0 ] [' it e m ' , 1 , 5 .0 ] # p a s d ’e r r e u r > > > S = [3 , 4 ] > > > p r in t L + S [' it e m ' , 1 , 5 .0 , 3 , 4 ] > > > L.a p p e n d (2 ) [' it e m ' , 1 , 5 .0 , 2 ] > > > d e l L[1 ] > > > p r in t L [' it e m ' , 5 .0 , 2 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 1 9
Le s s t r u c t u r e s d e d o n n é e s
(3 )
Li s t e s (s u it e e t fin )
> > > L = [3 ] > > > p r in t L * 4 [3 , 3 , 3 , 3 ] > > > p r in t L.c o u n t (3 ) 4 > > > L = [5 , 3 , 7 , 0 ] > > > L.s o r t () > > > p r in t L [0 , 3 , 5 , 7 ] > > > L = [[1 , 2 ], [3 , 4 , 5 ]] > > > fo r i in L: . . . fo r j in i: . . . p r in t j, 1 2 3 4 5 E n c o r e d ’a u t r e s m é t h o d e s a p p lic a b le s a u x lis t e s : re v e rs e (), in d e x (), in s e rt (), re m o v e (),…S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 0
Le s s t r u c t u r e s d e d o n n é e s
(4 )
Tu p l e s
> > > T = (0 , 2 , ' it e m ' ) > > > fo r i in T: . . . p r in t i, 0 2 ' it e m ' > > > T[1 ] = 1 Ty p e Erro r: o b je t d o e s n ’t s u p p o rt it e m a s s ig n m e n t > > > T = (3 ,) # t u p le à 1 é lt , # a t t e n t io n (3 ) e s t l’e n t ie r 3 ! • An a lo g u e a u x lis t e s à la d iffé r e n c e (im p o r t a n t e !) p r è s q u e le s é l é m e n t s d ’u n t u p le n e s o n t p a s m o d i f i a b l e s • Le s t u p le s fo n c t io n n e n t d o n c c o m m e le s lis t e s m a is le u r im p la n t a t io n e s t d e c e fa it p lu s e ffic a c e # 1 , 2 , 3 e s t u n t u p le x, y, z = 1 , 2 , 3S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 1
Le s s t r u c t u r e s d e d o n n é e s
(5 )
D i c t i o n n a i re s
> > > D = { ' N o m ' : ' Du p o n t ' , . . . 3 : ' p r e m ie r ' } > > > p r in t D[1 ], D[' N o m ' ] p re m ie r Du p o n t > > > fo r k in D: . . . p r in t D[k ], p re m ie r Du p o n t > > > D = { } # d ic t io n n a ir e # vid e • Le s d ic t io n n a ir e s s o n t d e s t a b le a u x a s s o c ia t ifs : { c l é : v a le u r,…} • U n e c lé p e u t ê t r e (p r e s q u e ) n ’im p o r t e q u e l o b je t P yt h o n e t p a s n é c e s s a ir e m e n t u n e c h a în e d e c a r a c t è r e sS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 2
Le s s t r u c t u r e s d e d o n n é e s
(6 )
D i c t i o n n a i re s
(s u it e )
> > > D = { ' N o m ' : ' Du p o n t ' , . . . 3 : ' p r e m ie r ' } > > > p r in t D.k e ys () [' No m ' , 3 ] > > > p r in t D.va lu e s () [' Du p o n t ' , ' p re m ie r' ] > > > p r in t D.it e m s () [(' No m ' , ' Du p o n t ' ), (3 , ' p re m ie r' )] > > > if D.h a s _k e y(3 ): . . . p r in t D[3 ] p re m ie r > > > D = { ' Ag e n t ' : . . . { ' N o m ' : ' Du p o n t ' , . . . ' P r é n o m ' : ' Je a n ' , . . . ' Ag e ' : 3 1 . . . } . . . }S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 3
La g e s t io n d e s e r r e u r s (1 )
# !/u s r /b in /e n v p yt h o n t = [0 , ' s t r ' , 5 ] t r y: t [3 ] = 1 e xc e p t In d e xE r r o r : p r in t ' in d ic e in c o r r e c t ' > > > e x.p y in d ic e in c o rre c t # !/u s r /b in /e n v p yt h o n t = [0 , ' s t r ' , 5 ] t r y: t [3 ] = 1 e xc e p t In d e xE r r o r , m s g : p r in t m s g > > > e x.p y lis t a s s ig n m e n t in d e x o u t o f ra n g eS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 4
La g e s t io n d e s e r r e u r s (2 )
# !/u s r /b in /e n v p yt h o n t = [0 , ' s t r ' , 5 ] t r y: p r in t a t [3 ] = 1 e xc e p t In d e xE r r o r , m s g : p r in t m s g e xc e p t N a m e E r r o r , m s g : p r in t m s g e xc e p t : p r in t ' a u t r e e r r e u r ' e ls e : p r in t "p a s d ' e r r e u r " > > > e x.p y n a m e 'a ' is n o t d e fin e d > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 5
La g e s t io n d e s e r r e u r s (3 )
# !/u s r /b in /e n v p yt h o n F a t a lE r r o r = ' E r r e u r F a t a le ' t r y: Co d e Py t h o n … e xc e p t (In d e xE r r o r , N a m e E r r o r ), m s g : p a s s # ig n o r e l’e r r e u r e xc e p t : r a is e F a t a lE r r o r , \ ' a u t r e e r r e u r ' > > > e x.p y Erre u r Fa t a le : a u t re e rre u r > > > S i le Co d e Py t h o n d u b lo c t ry g é n è r e u n e e xc e p t io n a u t r e q u e In d e x E rro r o u N a m e E rro r, o n a u r a :S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 6
La g e s t io n d e s e r r e u r s (4 )
# !/u s r /b in /e n v p yt h o n fd = o p e n (' fic h ie r ' , ' r ' ) t r y: p a r s e (fd ) fin a lly: fd .c lo s e () • Le b lo c f i n a l l y e s t e xé c u t é a p r è s l’e xé c u t io n d u b lo c t ry q u ’il y a it e u o u n o n e r r e u r • f i n a l l y p r o p a g e a u n ive a u s u p é r ie u r le s e r r e u r s é ve n t u e lle s • f i n a l l y e s t in c o m p a t ib le a ve c e x c e p t o u e l s e d a n s le m ê m e b lo c t ryS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 7
La g e s t io n d e s e r r e u r s (5 )
(q u e lq u e s e xc e p t io n s p r é d é fin ie s )
• O ve r flo w E r r o r • Ru n t im e E r r o r • S yn t a xE r r o r • S ys t e m E r r o r • S ys t e m E xit • Typ e E r r o r • Va lu e E r r o r • Ze r o Divis io n E r r o r • At t r ib u t e E r r o r • E O F E r r o r • IO E r r o r • Im p o r t E r r o r • In d e xE r r o r • Ke yE r r o r • Ke yBo a r d In t e r r u p t • M e m o r yE r r o r • N a m e E r r o rS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 8
Le s fo n c t io n s (1 )
> > > d e f e c h o (a r g ): . . . p r in t a r g > > > e c h o (2 .1 ) 2 .1 > > > e c h o ([1 , ' it e m ' , -3 .5 ]) [1 , 'it e m ', -3 .5 ] > > > e c h o ({ } ) { } > > > Le n o m d ’u n e fo n c t io n e s t u n e va r ia b le , o n p e u t e n p a r t ic u lie r é c r ir e : > > > e c h o (e c h o ) < fu n c t io n e c h o a t 0 x 0 0 9 A3 7 B8 > > > > x = e c h o > > > x(' it e m ' ) it e m > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 2 9
Le s fo n c t io n s (2 )
(l’in s t r u c t io n re t u rn , r é c u r s ivit é )
# !/u s r /b in /e n v p yt h o n d e f e xp (x, n ): r = 1 fo r i in r a n g e (n ): r *= x r e t u r n r p r in t e xp (2 , 3 2 ) • La va le u r d e r e t o u r d ’u n e fo n c t io n p e u t ê t r e u n o b je t P yt h o n q u e lc o n q u e • re t u rn e s t o p t io n n e l • Ré c u r s ivit é : > > > e xp .p y 4 2 9 4 9 6 7 2 9 6 # !/u s r /b in /e n v p yt h o n d e f fa c t (n ): if n = = 0 : r e t u r n 1 r e t u r n n * fa c t(n - 1 )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 0
Le s fo n c t io n s (3 )
(l’in s t r u c t io n g lo b a l)
# !/u s r /b in /e n v p yt h o n M AX = 2 d e f g f(): M AX = 4 g f() p r in t M AX # !/u s r /b in /e n v p yt h o n M AX = 2 d e f g f(): g lo b a l M AX M AX = 4 g f() p r in t M AX > > > g f.p y 2 > > > > > > g f.p y 4 > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 1
Le s fo n c t io n s (4 )
(fo n c t io n s lo c a le s )
# !/u s r /b in /e n v p yt h o n d e f t _s u p (t ): d e f s u p (a , b ): if a < b : r e t u r n b r e t u r n a r = t [0 ] fo r i in t [:-1 ]: r = s u p (i, r ) r e t u r n r p r in t t _s u p ((3 , 2 0 , -1 , 1 2 , 2 )) > > > lf.p y 2 0 > > > • A la d iffé r e n c e d u C , p o s s ib ilit é d e d é fin ir d e s fo n c t io n s lo c a le s • La fo n c t io n s u p n ’e s t p a s c o n n u e a u n ive a u g lo b a lS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 2
Le s fo n c t io n s (5 )
(a r g u m e n t s fa c u lt a t ifs , n o m b r e
d ’a r g u m e n t s va r ia b le )
> > > d e f a f(a 1 , a 2 = 2 , a 3 = 3 ): . . . p r in t a 2 , a 3 > > > a f(1 ) 2 3 > > > a f(1 , 2 0 , 3 0 ) 2 0 3 0 > > > a f(1 , 2 0 ) 2 0 3 > > > > > > d e f a v(a , *a r g s ): . . . fo r a r g in a r g s : . . . p r in t a r g , > > > a v(1 ) > > > a v(1 , ' s t r ' , 2 .0 , 5 ) s t r 2 .0 5 > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 3
Le s fo n c t io n s (6 )
(a r g u m e n t s fa c u lt a t ifs , n o m b r e
d ’a r g u m e n t s va r ia b le )
> > > d e f a fv(a 1 , a 2 = 2 , *a r g s ): . . . p r in t a 2 , . . . fo r a r g in a r g s : . . . p r in t a r g , > > > a fv(1 ) 2 > > > a fv(1 , 2 0 ) 2 0 > > > a fv(1 , 2 0 , ' s t r ' , -5 .1 ) 2 0 s t r -5 .1 > > > • O n p e u t m ixe r le s d e u x fo r m e s (a r g u m e n t s fa c u lt a t ifs & o p t io n n e ls ) • Le s a r g u m e n t s fa c u lt a t ifs d o ive n t ê t r e d é c la r é s e n p r e m ie rS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 4
Le s fo n c t io n s (7 )
(a r g u m e n t s fa c u lt a t ifs , n o m b r e
d ’a r g u m e n t s va r ia b le )
# !/u s r /b in /e n v p yt h o n
d e f a d (a , **d ic t ):
# d ic t e s t u n
d ic t io n n a ir e
p r in t d ic t .it e m s ()
a d (1 , b g = ' ve r t ' , fg = ' n o ir ' , g a m m a = 0 .9 9 )
> > > d ic t .p y
[('b g ', 'v e rt '), ('g a m m a ',
0 .9 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ),
('fg ', 'n o ir')]
> > >
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 5
Le s fo n c t io n s (8 )
(a r g u m e n t s fa c u lt a t ifs , n o m b r e
d ’a r g u m e n t s va r ia b le )
# !/u s r /b in /e n v p yt h o n d e f a fvd (a 1 , a 2 = 3 , *a r g s , **d ic t ): p r in t a 2 , fo r a r g in a r g s : p r in t a r g , p r in t d ic t .it e m s () a fvd (1 , 2 0 , -5 .1 , 1 0 , b g = ' ve r t ' , fg = ' n o ir ' ) Le s a r g u m e n t s o p t io n n e ls d e t yp e d ic t io n n a ir e d o ive n t ê t r e d é c la r é s e n d e r n ie rS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 6
Le s fo n c t io n s (9 )
(a r g u m e n t s fa c u lt a t ifs , n o m b r e
d ’a r g u m e n t s va r ia b le )
> > > d e f fo n c t (x, y, z): . . . p r in t x, y, z > > > fo n c t (1 , z= 3 , y= 2 ) 1 2 3 > > > fo n c t (1 , y= 2 , 3 ) S y n t a x Erro r: n o n -k e y w o rd a rg a ft e r k e y w o rd a rg > > > > > > fo n c t (1 , y= 2 , x= 1 ) Ty p e Erro r: fo n c t () g o t m u lt ip le v a lu e s fo r k e y w o rd a rg u m e n t 'x ' > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 7
Le s fo n c t io n s (1 0 )
(le s fo n c t io n s a n o n ym e s : la m b d a )
f = la m b d a x, y: x * y > > > d e f f(x, y): . . . C o d e P yt h o n > > > f_x = la m b d a x: f(x, y= 0 ) d e f f(x, y): r e t u r n x * y↕
• U n e xe m p le u t ile : • L’e xe m p le p r é c é d e n t p e u t a u s s i s ’é c r ir e : > > > d e f f(x, y): . . . C o d e P yt h o n > > > f_x = la m b d a x, y= 0 : \ f(x, y)• Le s fo n c t io n s a n o n ym e s s ’u t ilis e n t é g a le m e n t e n c o n jo n c t io n a ve c m a p , re d u c e e t f i l t e rS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 8
Le s fo n c t io n s (1 1 )
(p r o g r a m m a t io n fo n c t io n n e lle : m a p )
# !/u s r /b in /e n v p yt h o n d e f f(x): r e t u r n x * x s = (2 , 3 , 4 , 5 ) p r in t m a p (f, s ) p r in t m a p (N o n e , s ) # id e n t it é • P yt h o n o ffr e le s o u t ils q u e l’o n t r o u ve d a n s t o u t la n g a g e fo n c t io n n e l t e l S c h e m e • O u t r e le s fo n c t io n s a n o - n ym e s , o n d is p o s e d e s fo n c t io n s m a p , a p p l y re d u c e e t f i l t e r > > > m a p .p y [4 , 9 , 1 6 , 2 5 ] [2 , 3 , 4 , 5 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 3 9
Le s fo n c t io n s (1 2 )
(p r o g r a m m a t io n fo n c t io n n e lle : m a p )
# !/u s r /b in /e n v p yt h o n d e f f(x, y): r e t u r n x * y s = (2 , 3 , 4 , 5 ) p r in t m a p (N o n e , s , m a p (la m b d a x: f(x, y= x), s )) p r in t m a p (f, s , m a p (la m b d a x: f(x, y= x), s )) > > > m a p .p y [(2 , 4 ), (3 , 9 ), (4 , 1 6 ), (5 , 2 5 )] # lis t e d e s a r g u m e n t s p a s s é s à f [8 , 2 7 , 6 4 , 1 2 5 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 0
Le s fo n c t io n s (1 3 )
(p r o g r a m m a t io n fo n c t io n n e lle : a p p ly )
# !/u s r /b in /e n v p yt h o n d e f e c h o (a r g ): p r in t a r g d e f le n g t h (a r g ): le n = 0 fo r c in a r g : le n + = 1 p r in t le n t o d o = ((e c h o , (3 ,)), (le n g t h , (' c h a in e ' ,))) fo r (f, a ) in t o d o : a p p ly(f, a ) # f(a ) > > > a p .p y 3 6 > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 1
Le s fo n c t io n s (1 4 )
(p r o g r a m m a t io n fo n c t io n n e lle : re d u c e )
# !/u s r /b in /e n v p yt h o n d e f f(x, y): # fo n c t io n n é c e s s a ir e m e n t à 2 a r g u m e n t s r e t u r n x * y d e f fa c t (n ): # u n e a u t r e m a n iè r e d e c o d e r n ! r e t u r n r e d u c e (f, r a n g e (1 , n + 1 ), 1) # va le u r in it ia le , n é c e s -p r in t m a -p (fa c t , r a n g e (6 )) # s a ir e s i la lis t e e s t vid e > > > r e d u c e .p y [1 , 1 , 2 , 6 , 2 4 , 1 2 0 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 2
Le s fo n c t io n s (1 5 )
(p r o g r a m m a t io n fo n c t io n n e lle : filt e r)
# !/u s r /b in /e n v p yt h o n M AS K = 1 < < 3 d e f f(x): r e t u r n x & M AS K s = r a n g e (1 0 ) p r in t filt e r (N o n e , s ), filt e r (f, s ) • f ilt e r (fo n c t , s e q ) c o n s t r u it u n e s u it e c o n s t it u é e d e s é lé m e n t s d e la s u it e s e q p o u r le s q u e ls la fo n c t io n fo n c t r e t o u r n e v ra i (≠ 0 ) • S i fo n c t va u t No n e , s e u ls le s é lé m e n t s n o n n u ls d e la s u it e s e q s o n t r e t o u r n é s > > > filt e r .p y [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] [8 , 9 ]S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 3
Le s fo n c t io n s (1 6 )
(le s lis t e s e n « c o m p r é h e n s io n » )
• Le s lis t e s e n c o m p r é h e n s io n
fo u r n is s e n t u n m o ye n p lu s
e xp lic it e d e c o n s t r u ir e d e s lis t e s
q u ’a ve c m a p , re d u c e , filt e r e t /o u
la m b d a
• U n e lis t e e n c o m p r é h e n s io n e s t
c o n s t it u é e d ’u n e e xp r e s s io n s u ivie
d ’u n e in s t r u c t io n fo r, e lle -m ê m e
é ve n t u e lle m e n t s u ivie d ’u n e o u
p lu s ie u r s in s t r u c t io n s fo r o u if
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 4
Le s fo n c t io n s (1 7 )
(le s lis t e s e n « c o m p r é h e n s io n » )
l1 = r a n g e (1 , 6 ) l2 = [x * x fo r x in l1 ] l3 = [x * x fo r x in l1 if x != 1 a n d x != 5 ] p r in t l2 , l3 l4 = [[x, x * x] fo r x in l3 [:2 ]] l5 = [' x= % d y= % d ' % (x, y) fo r x in l1 [:2 ] fo r y in l2 [:2 ]] p r in t l4 , l5 [1 , 4 , 9 , 1 6 , 2 5 ] [4 , 9 , 1 6 ] [[4 , 1 6 ], [9 , 8 1 ]] ['x = 1 y = 1 ', 'x = 1 y = 4 ', 'x = 2 y = 1 ', 'x = 2 y = 4 ']S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 5
Le s m o d u le s (1 )
• Le s m o d u le s s o n t im p lé m e n t é s s o it
e n P yt h o n (c e s o n t a lo r s d e
s im p le s fic h ie r s t e xt e c o n t e n a n t
d e s in s t r u c t io n s P yt h o n ) s o it e n C
• Le c h a r g e m e n t d ’u n m o d u le e s t
in d é p e n d a n t
d e
s o n
im p lé m e n t a t io n
• Le s
m o d u le s
d is p o n ib le s d a n s la
ve r s io n 2 .2 .1 (il y e n a d e s d iza in e s
!)
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 6
Le s m o d u le s (2 )
(im p o rt )
# !/u s r /b in /e n v p yt h o n # m o d u le e s s a i.p y d e f p r n (): p r in t ' e s s a i.p y' La d ir e c t ive im p o rt e s s a i.p y : 2. r e c h e r c h e le fic h ie r e s s a i.p y (à l’a id e d e la va r ia b le s y s .p a t h ) 3. e xé c u t e le c o d e 4. c h a r g e t o u s le s o b je t s d é fin is d a n s u n n o u ve l e s p a c e d e n o m s (e s s a i) 5. c h a r g e l’o b je t m o d u le e s s a i d a n s l’e s p a c e d e n o m s c o u r a n t (__m a in __) > > > im p o r t e s s a i > > > e s s a i.p r n () e s s a i.p y > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 7
Le s m o d u le s (3 )
(im p o rt e t fro m )
# !/u s r /b in /e n v p yt h o n # m o d u le e s s a i.p y x = 3 d e f p r n (): p r in t ' e s s a i.p y' • C o m m e p r é c é d e m m e n t p o u r le s 3 p r e m iè r e s é t a p e s m a is r e m p la c e l’é t a p e 4 p a r u n e c o p ie d e la va r ia b le (ic i p rn ) • P o u r c h a r g e r p lu s ie u r s o u t o u s le s o b je t s d ’u n m o d u le : > > > fr o m e s s a i im p o r t p r n > > > p r n () e s s a i.p y > > > > > > fr o m e s s a i im p o r t p r n , x > > > fr o m e s s a i im p o r t *S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 8
Le s m o d u le s (4 )
( __m a in __ )
# m o d u le e s s a i.p y d e f p r n (): p r in t ' e s s a i.p y' p r n () • La fo n c t io n p rn s e r a a p p e lé e d è s q u e le m o d u le e s s a i.p y e s t im p o r t é p o u r la p r e m iè r e fo is • C e c o m p o r t e m e n t n ’e s t p a s t o u jo u r s s o u h a it a b le $ p yt h o n e s s a i.p y $ e s s a i.p y # m o d u le e s s a i.p y d e f p r n (): p r in t ' e s s a i.p y' if __n a m e __ = = ' __m a in __' : p r n () • p rn n e s e r a a p p e lé e q u e s i o u a u s s i (s o u s U n ix)S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 4 9
Le s m o d u le s (5 )
(re lo a d )
# m o d u le e s s a i.p y d e f p r n (): p r in t ' e s s a i.p y' > > > im p o r t e s s a i > > > e s s a i.p r n () e s s a i.p y O n m o d ifie m a in t e n a n t le m o d u le e s s a i.p y… # m o d u le e s s a i.p y d e f p r n (): p r in t ' Le m o d u le e s s a i.p y' > > > e s s a i.p r n () e s s a i.p y > > > r e lo a d(e s s a i) < m o d u le 'e s s a i' fro m 'e s s a i.p y '> > > > e s s a i.p r n () Le m o d u le e s s a i.p yS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 0
Le s m o d u le s (6 )
(d ir, __d ic t __ )
d e f p r n (): # m o d u le e s s a i.p y p r in t ' e s s a i.p y' d e f p r n (): # m o d u le e s s a i.p y p r in t ' e s s a i.p y' __d o c __ = """\ Do c d e e s s a i.p y""" > > > p r in t d ir (e s s a i) ['__b u ilt in s __', '__n a m e __', '__file __', 'p rn ', '__d o c __'] > > > p r in t e s s a i.__file __ /u s e rs /y lg /e s s a i.p y > > > p r in t e s s a i.__d o c __ No n e > > > p r in t e s s a i.__d o c __ Do c d e e s s a i.p y e s s a i.__d o c __ e s s a i.__d ic t __[' __d o c __' ] ↕S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 1
Le s c la s s e s (1 )
(g é n é r a lit é s )
c la s s S im p le : # c la s s e d e f s h o w (s e lf, a r g ): # m é t h o d e p r in t a r g i = S im p le () # i in s t a n c e d e la # c la s s e S im p le i.s h o w (' e s s a i' ) # ‘.’ a p p e l d e la # m é t h o d e s h o w • Le s c la s s e s , c o m m e le s fo n c t io n s , s o n t d é fin ie s a u s e in d ’u n m o d u le • O u t il d e b a s e p o u r la p r o g r a m m a t io n o r ie n t é e o b je t e n P yt h o n • H é r it a g e e t h é r it a g e m u lt ip le • An a lo g u e a u x c la s s e s d e C + + , m a is a ve c d e s d iffé r e n c e s im p o r t a n t e s > > > c l.p y e s s a iS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 2
Le s c la s s e s (2 )
(g é n é r a lit é s )
# !/u s r /b in /e n v p yt h o n c la s s S im p le : d e f s h o w (s e lf, a r g ): p r in t a r g x = S im p le () # x in s t a n c e y = S im p le () # y in s t a n c e x.la b e l = ' x' # n o u ve l a t t r ib u t y.la b e l = ' y' # n o u ve l a t t r ib u t x.s h o w (y.la b e l) • Le s in s t a n c e s x e t y o n t u n n o u ve l a t t r ib u t la b e l q u i n ’e s t p a s u n a t t r ib u t d e la c la s s e S im p le , c h a c u n e a ya n t s a p r o p r e c o p ie lo c a le • O n n e p r o c è d e p a s h a b it u e lle m e n t d e c e t t e m a n iè r e : p r o b lè m e d e c o h é r e n c eS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 3
Le s c la s s e s (3 )
(g é n é r a lit é s )
# !/u s r /b in /e n v p yt h o n c la s s S im p le : d e f s h o w (s e lf, a r g ): p r in t a r g d e f s e t _la b e l(s e lf, la b e l): s e lf.la b e l = la b e l d e f g e t _la b e l(s e lf): s e lf.s h o w (s e lf.la b e l) i = S im p le () i.s e t _la b e l(' x' ) # la b e l e s t c r é e • Ic i l’a t t r ib u t la b e l e s t c r é é a u s e in d e la c la s s e S im p le • Q u a n d u n e in s t a n c e d ’u n e c la s s e a p p e lle u n e m é t h o -d e , l’in s t a n c e e lle -m ê m e e s t p a s s é e (d e m a n i è re i m p l i c i t e ) c o m m e p r e m ie r a r g u m e n t d e la m é t h o d e • C e t a r g u m e n t a p o u r n o m s e lf p a r c o n ve n t io n (m a is il p o u r r a it a vo ir n ’im p o r t e q u e l a u t r e n o m )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 4
Le s c la s s e s (4 )
(l’h é r it a g e )
c la s s S im p le : d e f s h o w (s e lf, a r g ): p r in t a r g c la s s S im p le F ille (S im p le): d e f s e t _la b e l(s e lf, la b e l): s e lf.la b e l = la b e l d e f g e t _la b e l(s e lf): s e lf.s h o w(s e lf.la b e l) i = S im p le F ille () i.s h o w(' e s s a i' ) • La c la s s e S im p le Fille h é r it e d e t o u t e s le s m é - t h o d e s e t a t t r ib u t s d e la c la s s e S im p le s a u f s i e lle le s r e d é fin it • To u t e s le s m é t h o d e s e t a t t r ib u t s s o n t vi rt u e l s a u s e n s d e C + + . Le u r s r é fé - r e n c e s n e s o n t e xa m in é e s q u ’à l’e xé c u t io n (ru n t im e )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 5
Le s c la s s e s (5 )
(l’h é r it a g e )
c la s s S im p le : d e f s h o w (s e lf, a r g ): p r in t ' S im p le ' , a r g c la s s S im p le F ille (S im p le ): d e f s e t _la b e l(s e lf, la b e l): s e lf.la b e l = la b e l d e f g e t _la b e l(s e lf): s e lf.s h o w (s e lf.la b e l) d e f s h o w(s e lf, a r g ): p r in t ' S im p le F ille ' , a r g i = S im p le () i.s h o w (' i' ) j= S im p le F ille () j.s h o w (' j' ) > > > c l.p y S im p le i S im p le Fille j > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 6
Le s c la s s e s (6 )
(l’h é r it a g e m u lt ip le )
c la s s C 1 : d e f m (s e lf): p r in t ' C 1 .m ' c la s s C 2 : d e f m (s e lf): p r in t ' C 2 .m ' c la s s A(C 1 , C 2 ): p a s s c la s s B(C 2 , C 1 ): p a s s a , b = A(), B() a .m () # il y a c o n flit d e n o m s , b .m () # C1 .m o u C2 .m ? > > > c l.p y C1 .m C2 .m c la s s B(C 2 , C 1 ): m = C 1 .m P o u r r é s o u d r e le c o n flit :S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 7
Le s c la s s e s (7 )
(c o n s t r u c t e u r : __in it __)
c la s s P a c k e t : d e f __in it __(s e lf, d a t a ): s e lf.d a t a = d a t a c la s s P a c k e t Wit h H d r (P a c k e t ): d e f __in it __(s e lf, h d r , d a t a ): s e lf.h d r = h d r P a c k e t .__in it __(s e lf, d a t a ) p k t = P a c k e t (' d a t a ' ) p k h = P a c k e t Wit h H d r (' h e a d e r ' , ' d a t a ' ) • Lo r s q u ’u n e in s t a n c e e s t c r é é e , le c o n s t r u c t e u r __in it __ e s t a u t o m a t i- q u e m e n t a p p e lé • U n c o n s t r u c t e u r e s t u n e m é t h o d e c o m m e u n e a u t r e , e n p a r t ic u lie r d u p o in t d e vu e d e l’h é r it a g e • C o n t r a ir e m e n t à C + + , P yt h o n n ’in vo q u e q u ’u n s e u l c o n s t r u c t e u r → g e s t io n m a n u e lle : Pa c k e t .__in it __S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 8
Le s c la s s e s (8 )
(d e s t r u c t e u r : __d e l__)
c la s s C la s s e : d e f __d e l__ (s e lf): p r in t s e lf, ' d e le t e d ' x = C la s s e () d e l x • Lo r s q u ’u n e in s t a n c e e s t d é t r u it e (i.e q u a n d la d e r n iè r e r é fé r e n c e e s t s u p p r im é e ), le d e s t r u c t e u r __d e l__ e s t a u t o m a t iq u e - m e n t a p p e lé • C o m m e p o u r le s c o n s t r u c - t e u r s , u n s e u l d e s t r u c t e u r e s t in vo q u é lo r s d e la s u p p r e s s io n d ’u n e in s t a n c e d a n s le c a s d ’u n e c la s s e fille > > > c l.p y < __m a in __.Cla s s e in s t a n c e a t 0 x 0 0 9 E3 1 6 8 > d e le t e d > > >S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 5 9
Le s c la s s e s (9 )
(s u r c h a r g e d ’o p é r a t e u r /m é t h o d e )
c la s s P a c k e t : d e f __in it __(s e lf, d a t a ): s e lf.d a t a = d a t a d e f __a d d __(s e lf, d a t a ): r e t = P a c k e t (s e lf.d a t a ) r e t .d a t a + = d a t a r e t u r n r e t d e f __r e p r __(s e lf): r e t u r n ' Da t a : ' + s e lf.d a t a > > > c l.p y Da t a : d a t a 1 -d a t a 2 > > > p k t = P a c k e t (' d a t a 1 ' ) p k t + = ' -d a t a 2 ' p r in t p k t • S u r c h a r g e d e s m é t h o d e s __a d d __ (+ ) e t __re p r__ (p rin t )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 0
Le s c la s s e s (1 0 )
(s u r c h a r g e d ’o p é r a t e u r /m é t h o d e )
P a c k e t IP E r r o r = ' P a c k e t IP E r r o r ' c la s s P a c k e t IP : d e f __in it __(s e lf, d a t a ): s e lf.__d ic t __[' t yp e ' ], s e lf.d a t a = ' IP v4 ' , d a t a d e f __s e t a t t r __(s e lf, n o m , va l): if n o m = = ' t yp e ' : # a n a lo g u e d e p r iva t e : e n C + + r a is e P a c k e t IP E r r o r , ' a t t r ib u t t yp e n o n m o d ifia b le ' s e lf.__d ic t __[n o m ] = va l # o n n ’é c r it p a s s e lf.n o m = v a l # c a r c ’e s t é q u iva le n t à s e lf.__s e t a t t r__(n o m , v a l) !S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 1
Le s c la s s e s (1 1 )
(le s m é t h o d e s p r é d é fin ie s )
c o n s t r u c t e u r d e s t r u c t e u r ` s e lf` , p r in t s e lf, r e p r (s e lf) s t r (s e lf), p r in t s e lf s e lf > x, s e lf = = x, … x < = s e lf, x != s e lf, … d ic t io n n a r y[s e lf], h a s h (s e lf] s e lf(a r g s …) __in it __(s e lf, a r g s …) __d e l__(s e lf) __r e p r __(s e lf) __s t r __(s e lf) __c m p __(s e lf, o t h e r ) __r c m p __(s e lf, o t h e r ) __h a s h __(s e lf) __c a ll__(s e lf, *a r g s )To u s l e s t yp e s
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 2
Le s c la s s e s (1 2 )
(le s m é t h o d e s p r é d é fin ie s )
s e lf.n o m s e lf.n o m = va l d e l s e lf.n o m __g e t a t t r __(s e lf, n o m ) __s e t a t t r __(s e lf, n o m , va l) __d e la t t r __(s e lf, n o m )To u s l e s t yp e s (s u it e )
Co l l e c t i o n s
le n (s e lf) s e lf[k e y], x in s e lf, fo r x in s e lf s e lf[k e y] = va l __le n __(s e lf) __g e t it e m __(s e lf, k e y) __s e t it e m __(s e lf, k e y, va l)S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 3
Le s c la s s e s (1 3 )
(le s m é t h o d e s p r é d é fin ie s )
s e lf[l:h ] s e lf[l:h ] = s e q d e l s e lf[l:h ] __g e t s lic e __(s e lf, l, h ) __s e t s lic e __(s e lf, l, h , s e q ) __d e ls lic e __(s e lf, l, h )Co l l e c t i o n s (s u it e )
N o m b re s
__m o d __ __r m o d __ __d ivm o d __ __p o w __ __m u l__ __r m u l__ __d iv__ __r d iv__ __a d d __ __r a d d __ __s u b __ __r s u b __S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 4
Le s c la s s e s (1 4 )
(le s m é t h o d e s p r é d é fin ie s )
N o m b re s (s u it e )
__in t __ __lo n g __ __flo a t __ __o c t __ __h e x__ __o r __ __r o r __ __n e g __ __p o s __ __a b s __ __in ve r t __ __n o n ze r o __ __c o e r c e __ __ls h ift __ __r ls h ift __ __r s h ift __ __r r s h ift __ __a n d __ __r a n d __ __xo r __ __r xo r __S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 5
Le s c la s s e s (1 5 )
(le s a t t r ib u t s p r é d é fin is )
c la s s A: d e f p r (a r g ): p r in t a r g c la s s B(A): p a s s p r in t A.__d ic t __, A.__n a m e __ p r in t B.__b a s e s __ a , b = A(), B() p r in t a .__c la s s __, p r in t is in s t a n c e (a , A), p r in t is s u b c la s s (B, A) { 'p r': < fu n c t io n p r a t 0 x 0 0 9 2 1 4 F8 > , '__m o d u le __': '__m a in __', '__d o c __': No n e } A (< c la s s __m a in __.A a t 0 x 0 1 0 4 1 6 9 8 > ,) __m a in __.A 1 1S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 6
Le s fic h ie r s (1 )
# !/u s r /b in /e n v p yt h o n fd = o p e n(' e s s a i.p y' , ' r ' ) p r in t fd .r e a d(), fd .s e e k(0 , 0 ) p r in t fd .r e a d (3 ) fd .s e e k (0 , 0 ) p rin t fd .re a d (3 ) # !/ > > > file .p y # !/u s r/b in /e n v p y t h o n fd = o p e n ('e s s a i.p y ', 'r') p rin t fd .re a d () c lo s e () t e ll() is a t t y () flu s h () re a d lin e () re a d lin e s () w rit e (s t rin g ) w rit e lin e s (lis t )• Le s a u t r e s m é t h o d e s :
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 7
Le s fic h ie r s (2 )
• O n p e u t é g a le m e n t a c c é d e r a u x fic h ie r s via le m o d u le o s • Da n s c e c a s , o n d is p o s e d e s a p p e ls s ys t è m e U n ix s t a n d a r d : re a d , w rit e , ls e e k , d u p ,… a ve c p r e s q u e la m ê m e s yn t a xe e t le s m ê m e s a r g u m e n t s (la p lu p a r t s o n t é g a le m e n t u t ilis a b le s s o u s Win d o w s o u M a c O S ) # !/u s r /b in /e n v p yt h o n im p o r t o s fd = o s .o p e n (' e s s a i' , o s .O _RDWR | o s .O _TRU N C , 0 6 4 4 ) o s .w r it e (fd , ' e s s a i' ) o s .c lo s e (fd )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 8
La d o c u m e n t a t io n e n lig n e
(1 )
> > > im p o r t __b u ilt in __ > > > p r in t d ir (__b u ilt in __) ['Arit h m e t ic Erro r', … 'z ip '] > > > p r in t c h r .__d o c __ c h r(i) -> c h a ra c t e r Re t u rn a s t rin g o f o n e c h a ra c t e r w it h o rd in a l i; 0 < = i < 2 5 6 . # !/u s r /b in /e n v p yt h o n d e f f(c ): """ f(x) -> r e t o u r n e s t r (x)\ """ r e t u r n s t r (x) p r in t f.__d o c __ > > > d o c .p y f(x ) -> re t o u rn e s t r(x )S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 6 9
La d o c u m e n t a t io n e n lig n e
(2 )
""" U n p e t it m o d u le \ """ c la s s A: """ La c la s s e A e s t vid e \ """ p a s s p r in t A.__d o c __, p r in t __d o c __ > > > d o c .p y La c la s s e A e s t v id e Un p e t it m o d u le • La d o c u m e n t a t io n e n lig n e , t r è s u t ile , e s t fa c ile à m e t t r e e n œ u vr e • A u t ilis e r s a n s m o d é r a t io n ! • P r is e e n c o m p t e p a r id leS e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7 0
É t e n d r e P yt h o n e n C (1 )
• É t e n d r e P yt h o n e n C e s t p a r fo is
n é c e s s a ir e s i l’o n ve u t c r é e r d e
n o u ve a u x t yp e s d e d o n n é e s o u a c c é d e r
à d e s a p p e ls s ys t è m e s n o n d é jà
d is p o n ib le s (il y e n a d e m o in s e n m o in s
!), e t c …
• S i l’o n s a it p r o g r a m m e r e n C, c e la n e
p r é s e n t e p a s d e d iffic u lt é s p a r t ic u liè r e s
• L’AP I P yt h o n fo u r n it t o u t c e d o n t o n a
b e s o in
• Le s e u l p o in t u n p e u d é lic a t e s t la
g e s t io n d e s r é fé r e n c e s d e s o b je t s
(m a c r o s PY_INCREF e t PY_DECREF)
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7 1
É t e n d r e P yt h o n e n C (2 )
(u n e xe m p le : m in im o d .c )
# in c lu d e < P yt h o n .h> // AP I P yt h o n s t a t ic P yO b je c t * M in iM o d _h e llo (P yO b je c t *s e lf, P yO b je c t *a r g s ) { if (!P yAr g _P a r s e Tu p le (a r g s , "")) // p a s d ’a r g u m e n t r e t u r n N U LL; // e xc e p t io n g é r é e p a r l’in t e r p r é t e u r fp r in t f(s t d o u t , "H e llo Wo r ld !\n ");P y_IN C RE F(P y_N o n e); // o n c r é e u n e n o u ve lle r é fé r e n c e
r e t u r n P y_N o n e; // d e l’o b je t Py _No n e (No n e )
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7 2
É t e n d r e P yt h o n e n C (3 )
(u n e xe m p le : m in im o d .c )
s t a t ic s t r u c t P yM e t h o d De f M in iM o d _m e t h o d s[] = {
{ "h e llo", M in iM o d _h e llo , M E TH _VARARGS } , { N U LL, N U LL} } ; // d é c la r a t io n d e s m é t h o d e s d u m o d u le m in im o d s t a t ic c h a r M in iM o d _d o c[] = "U n (t o u t ) p e t it m o d u le "; vo id in itm in im o d (vo id ) // in it ia lis a t io n d u m o d u le m in im o d { P y_In it M o d u le 3 ("m in im o d", M in iM o d _m e t h o d s, M in iM o d _d o c); }
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7 3
É t e n d r e P yt h o n e n C (4 )
(u n e xe m p le : m in im o d .c )
$ g c c –s h a r e d –I< p yt h o n _in c _d ir > m in im o d .c –o
m in im o d.s o $ p yt h o n > > > im p o r t m in im o d > > > m in im o d .h e llo () He llo W o rld ! > > > p r in t m in im o d .__d o c __ Un (t o u t ) p e t it m o d u le • < p yt h o n _in c _d ir > e s t le c a t a lo g u e o ù l’o n t r o u ve le fic h ie r Py t h o n .h (p a r e x., /u s r/lo c a l/in c lu d e /p y t h o n 2 .2 )
S e p t e m b r e 2 0 0 2 F o r m a t io n BC E AO 7 4