Bonjour,

J'ai besoin d'une confirmation sur un comportement d'une fonction et ses paramètres par défaut. Comme je ne sais pas comment appeler ce comportement, je ne sais pas trop où chercher sur la toile une explication.

Bref voilà une fonction fabrique:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
def factory():
    _name = "kango"
    def hello(name=_name):    
        print "hello",name
    return hello
Et voici un exemple d'utilisation:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
>>> myfunc=factory()
>>> myfunc()
hello cedric
>>> _name     
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name '_name' is not defined
J'interprète ceci de la façon suivante:

l'écriture

est interprété exactement comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
def hello(name="kango"):
Comme s'il y avait une "résolution" (mot peut être mal choisi) non pas à l'exécution de la fonction mais lors de la déclaration de celle ci.

Ca tombe bien, ce comportement m'arrange énormément mais j'aimerais le comprendre mieux avant de m'en servir. J'ai isolé le comportement sur un cas simple mais je me pose la question car je suis en train d'écrire une métaclasse (ma première ).

Que pouvez vous me dire sur ce comportement ?

Merci d'avance pour vos réponses