valeur par défaut dans un argument
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:
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:
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
Code:
def hello(name=_name):
est interprété exactement comme ceci:
Code:
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 :aie:).
Que pouvez vous me dire sur ce comportement ?
Merci d'avance pour vos réponses :D