从Python中调用命名空间获取局部变量

2024-04-25 11:58:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从Python的被调用函数中检索局部变量。有办法吗?我意识到这不适合大多数编程,但我基本上是在构建一个调试器。例如:

def show_locals():
  # put something in here that shows local_1.

local_1 = 123
show_locals()  # I want this to show local_1.

我在show_locals的主体中放了什么?如果我必须修改调用语句,我能做的最小修改是什么?

注意:show_locals与调用者在不同的模块中时,这必须有效。


Tags: inthathereputlocaldef编程show
2条回答

如果要编写调试器,则需要大量使用^{}模块:

def show_callers_locals():
    """Print the local variables in the caller's frame."""
    import inspect
    frame = inspect.currentframe()
    try:
        print(frame.f_back.f_locals)
    finally:
        del frame

使用python内置,dir()或vars():

变量(对象)

有关使用dir()的示例,请参见:this post

使用vars的示例:

>>> class X:
...     a=1
...     def __init__(self):
...         b=2
... 
>>> 
>>> vars(X)
{'a': 1, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x100488848>}
>>> 
>>> vars(X())
{}

一个潜在的问题是:新样式的类不会返回相同的结果

>>> class X(object):
...     a=1
...     def __init__(self):
...         b=2
... 
>>> 
>>> vars(X)
<dictproxy object at 0x1004a1910>
>>> vars(X())
{}

另外:对于一个实例化的类(新的和旧的样式),如果在实例化后添加一个变量,vars将返回对象的dict,如下所示:

>>> x = X() 
>>> x.c = 1
>>> vars(x)
{'c': 1}
>>> 

见:http://docs.python.org/library/functions.html#vars

相关问题 更多 >