Когда я изучал декораторы, я заметил кое-что странное:
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» ??
Поскольку a и b имеют одинаковую внешнюю область видимости, в которой msg связан с 'bb'. Поместите их в отдельные функции, если вы хотите, чтобы они имели разные области видимости.
a
b
msg
'bb'
И a, и b имеют доступ для чтения к внешней области (локальная область f).При перезаписи значения msg при последующем вызове a / b будет прочитано новое значение.
f