В следующей функции:
def info(self):
a = 4
def _inner():
b = 5
print ('LOCALS',locals())
print ('GLOBALS', globals())
_inner()
В python3.6
печатается следующее:
LOCALS {'b': 5}
GLOBALS {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'info': <function info at 0x1029d3598>}
Почему не a
, свободная переменная, включенная в_inner
locals()
? Из документов написано:
locals ()
Обновить и вернуть словарь, представляющий текущую локальную таблицу символов. Свободные переменные возвращаются locals()
при вызове в функциональных блоках, но не в блоках класса .
Кроме того, всегда ли переменные класса скрыты от locals()
? Например:
class X:
b = 2
def info(self):
a = 3
print (locals())
>>> X().info()
{'a': 3, 'self': <__main__.X object at 0x102aa6518>}