如果我有以下代码:
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
都没有提供它。
答案 0 :(得分:6)
仅当inner
实际包含对var_outer
变量的访问时,才会触发为inner
提供var_outer
访问权限的闭包变量机制。否则,var_outer
不会被保存,并且没有内省可以让您访问它。
答案 1 :(得分:4)
var_outer
确实无法在inner()
中使用。在嵌套函数中使变量可用要求变量以与开始不同的方式存储;由于缺少对嵌套函数变量的任何引用,Python没有这样做。如果您确实插入了这样的引用(例如裸声明var_outer
),它将显示在locals()
的输出中。
答案 2 :(得分:-1)
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'} [...]