Comme je suis en train d'étudier les décorateurs, j'ai remarqué quelque chose d'étrange:portée variable dans les fonctions imbriquées Python
def f():
... msg='aa'
... def a():
... print msg
... msg='bb'
... def b():
... print msg
... return a,b
...
>>> a,b = f()
>>> a()
bb
>>> b()
bb
>>>
Pourquoi() retourne 'bb' et non 'aa' ??
oui mais quand a() est défini, msg = 'aa' alors.Est-ce que cela signifie que les fonctions sont vraiment définies à la fin de la fonction parente? – Eric
La portée est liée à la fonction lorsque la fonction est définie. Mais le nom * dans * la portée renvoie à une chaîne différente. –
@Eric: La variable 'msg' n'est pas définie comme une constante" aa ". La variable survit dans la portée locale de 'f', et les fonctions internes' a'/'b' ont accès à cette portée à tout moment ultérieur. Lorsque vous remplacez immédiatement la valeur de 'msg', c'est-à-dire avant d'appeler' a' ou 'b', ils liront la nouvelle valeur. – AndiDog