переменная область действия во вложенных функциях Python - PullRequest
0 голосов
/ 14 октября 2010

Когда я изучал декораторы, я заметил кое-что странное:

def f():
...     msg='aa'
...     def a():
...             print msg
...     msg='bb'
...     def b():
...             print msg
...     return a,b
... 
>>> a,b = f()
>>> a()
bb
>>> b()
bb
>>> 

Почему a () возвращает «bb», а не «aa» ??

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Поскольку a и b имеют одинаковую внешнюю область видимости, в которой msg связан с 'bb'. Поместите их в отдельные функции, если вы хотите, чтобы они имели разные области видимости.

1 голос
/ 14 октября 2010

И a, и b имеют доступ для чтения к внешней области (локальная область f).При перезаписи значения msg при последующем вызове a / b будет прочитано новое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...