如果我有以下代码:
var_global = "global"
def outer() :
var_outer = "outer"
def inner() :
var_inner = "inner"
# How to get here all variables available (it should contain
# var_inner, var_outer, var_global)?
print("inner", locals(), globals())
return inner
我跑:
outer()()
我想print
位置获取所有变量。这也应该包括var_outer
。但locals
和globals
都没有提供。
仅当inner
实际包含对var_outer
变量的访问时,才会触发为inner
提供对var_outer
的访问的闭包变量机制。否则,var_outer
不会被保存,并且任何内省都不会让您访问它。
var_outer
确实在inner()
中不可用。 使变量在嵌套函数中可用需要从一开始就以不同的方式存储变量;Python没有这样做,因为缺少对嵌套函数变量的任何引用。 如果您确实插入了这样的引用(例如裸语句var_outer
(,它将显示在locals()
的输出中。
var_outer可以通过非本地访问var_inner。
var_global = "global"
def outer():
var_outer = "outer"
def inner():
var_inner = "inner"
print("inner", locals(), globals())
nonlocal var_outer
print(var_outer)
return inner
outer()()
将打印:
inner {'var_outer': 'outer', 'var_inner': 'inner'} [...]