如何获取范围内可用的所有变量?



如果我有以下代码:

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。但localsglobals都没有提供。

仅当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'} [...]

最新更新