Определения local/global/free variable из python doc:
Если имя связано в блоке, это локальная переменная этого блока, если не объявлено как нелокальная. Если имя связано с уровнем модуля, это глобальная переменная . (Переменные блока кода модуля являются локальными и глобальными.) Если переменная используется в кодовом блоке, но не определена там, это свободная переменная.
Код 1:
>>> x = 0
>>> def foo():
... print(x)
... print(locals())
...
>>> foo()
0
{}
Код 2:
>>> def bar():
... x = 1
... def foo():
... print(x)
... print(locals())
... foo()
...
>>> bar()
1
{'x':1}
Свободные переменные возвращаются locals()
при вызове в функциональных блоках, но не в блоках классов.
В Code 1
x
- глобальная переменная , и она используется, но не определена в foo()
.
Однако это не свободная переменная, потому что она не возвращается locals()
.
Я думаю, это не то, что сказал док. Есть ли техническое определение для свободной переменной?