分享
为什么问答平台  ›  专栏  ›  技术社区  ›  太極者無極而生

任何语言(或调试工具)是否有内置函数或方法来打印作用域链? - Does any language (or debugging tool) have a build in function or method to print out the scope chains?

  •  1
  • 太極者無極而生  · 技术社区  · 2 月前

    是否有任何语言或调试工具可以打印出范围链以供检查,从而查看范围链包含的内容的不同情况?

    1 回复  |  直到 7 年前
        1
  •  2
  •   bobince    9 年前

    Firebug用于JavaScript。在__script_ debugger的__watch_选项卡上,可以打开范围链列表,查看每个父范围。

    如果获取代码对象,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
    

    虽然两者 v1 v2 仅在父范围中定义 V1 实际上是封闭的。