1

是否有任何语言或调试工具可以打印出作用域链进行检查,从而查看作用域链包含的不同情况?

4

1 回答 1

2

Firebug 适用于 JavaScript。在“脚本”调试器的“观察”选项卡上,您可以打开范围链列表查看每个父范围。

如果你抓取一个代码对象,Python 可以从语言本身的父作用域读取本地变量,但它处理嵌套作用域的方式意味着只有实际使用的作用域变量被绑定:

>>> def a():
...     def b():
...         print v1
...     v1= 1
...     v2= 2
...     return b

>>> f= a()
>>> f.func_code.co_freevars
('v1',)
>>> f.func_closure
(<cell at 0x7fb601274da8: int object at ...>,)
>>> f.func_closure[0].cell_contents
1

虽然v1v2都在父范围中定义,但v1实际上是封闭的。

于 2010-05-03T23:55:39.240 回答