[wiki: Tests]
—-
Tests unitaires
#!python
—-
—-

#!python
>>> prompt = '#'
#!html
<br clear=right>
—-

#!python
>>> from module1 import *
#!html
<br clear=right>
—-

#!python
>>> prompt = '>'
#!html
<br clear=right>
—-
#!python
>>> printer('Hello !')
% Hello !
—-
—-
Les « protocoles » permettent au développeur de définir des classes combinables avec certaines instructions prédéfinies du langage.
—-
#!comment
Les differentes entités (avec état) que l'on peut fournir à un client attendant une fonction :
- fonction avec variables globales
- fonction avec enclosing-function scope references
- fonction avec default mutable arguments
- lambda-fonction avec argument par defaut
- un objet doté d'une méthode
call - méthode liée à un objet
- un "générateur" (utilisant yield) ?
Dans tout code qui s’attend à une fonction, et qui va utiliser l’objet en lui fournissant un ou plusieurs arguments entre parenthèses.
—-
Cherche d’abord !iter!(), qui doit retourner un iterateur (objet avec méthode next()),
puis à défaut cherche !getitem!().
Attention à ce qu’ !iter!() renvoie des objets bien autonomes,
par exemple pour permettre des doubles boucles.
—-
With/as : une sorte de try/finally pour les objets qui respectent le protocole des gestionnaires de contexte, à savoir possèdent des méthodes !enter! et !exit! .
#!comment
Optionnel en 2.5 (from !future! import with_statement), standard en 2.6
with expression [as variable]:
...
—-
Ces deux opérateurs permettent d’émuler, par exemple, des attributs privés :
getattr : appelé lorsque l’algo par défaut ne trouve riensetattr : appelé dès que l’on assigne un attribut, et gare à passer par dict pour éviter le bouclage à l’infini—-
—-

#!python
>>> m = 2
#!html
<br clear=right>
—-

#!python
>>> import module1 as m
#!html
<br clear=right>
—-

#!python
>>> m.prompt = '>'
#!html
<br clear=right>
—-
#!python
>>> m.printer('Hello !')
> Hello !
—-
—-

#!python
>>> def f(x):
... x[0] = "world"
...
>>> a = [ "hello" ]
#!html
<br clear=right>
—-

#!python
>>> f(a)
#!html
<br clear=right>

#!html
<br clear=right>
—-
#!python
>>> a
[ "world" ]
—-
—-

#!python
>>> def f(x):
... x = "world"
...
>>> a = "hello"
#!html
<br clear=right>
—-

#!python
>>> f(a)
#!html
<br clear=right>

#!html
<br clear=right>
—-
#!python
>>> a
"hello"
—-
—-

#!python
>>> a = [ "hello" ]
#!html
<br clear=right>
—-

#!python
>>> b = a
#!html
<br clear=right>
—-

#!python
>>> b[0] = "world"
#!html
<br clear=right>
—-
#!python
>>> a
[ "world" ]
—-
—-

#!python
>>> a = [ "hello" ]
#!html
<br clear=right>
—-

#!python
>>> b = a[:]
#!html
<br clear=right>
—-

#!python
>>> b[0] = "world"
#!html
<br clear=right>
—-
#!python
>>> a
[ "hello" ]
—-
—-

#!python
>>> a = "hello"
#!html
<br clear=right>
—-

#!python
>>> b = a
#!html
<br clear=right>
—-

#!python
>>> b = "world"
#!html
<br clear=right>
—-
#!python
>>> a
"hello"
—-