查看所有定义的变量

2024-04-25 00:27:52 发布

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

我目前正在用python shell进行计算。我想要的是一个Matlab风格的列表,在这里你可以看到所有的变量已经被定义到一个点(所以我知道我用了哪些名字,它们的值等等)。

有办法吗?我该怎么办?


Tags: 列表定义风格shell名字matlab办法
3条回答

你可以使用一些东西:

  • dir()将提供范围内变量的列表:
  • globals()将为您提供一个全局变量字典
  • locals()将为您提供一个局部变量字典

如果可能,您可能需要使用IPython

要获取所有当前用户定义变量的列表,IPython提供名为whomagic命令(magics必须以模字符作为前缀,除非启用了automagic功能):

In [1]: foo = 'bar'
In [2]: %who
foo

您可以使用whos魔术获得更多详细信息:

In [3]: %whos
Variable   Type    Data/Info
----------------------------
foo        str     bar

有很多其他的魔法可以使用。IPython基本上是使用类固醇的Python解释器。一个方便的魔术是store,它允许您在会话之间保存变量(使用pickle)。

注意:我与IPython Dev没有关联-只是一个满意的用户。

编辑:

您可以在IPython Documentation中找到所有的魔法命令。

This article还有一个关于在Jupyter笔记本中使用magic命令的有用部分

正如RedBlueThing和analog所说:

  • dir()提供范围内变量的列表
  • globals()提供全局变量字典
  • locals()给出了一个局部变量字典

使用交互式shell(版本2.6.9),在创建变量a = 1b = 2之后,运行dir()将给出

['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']

运行locals()给出

{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}

运行globals()给出的答案与本例中的locals()完全相同。

我还没有进入任何模块,所以所有变量都可以作为局部和全局变量使用。locals()globals()列出变量值和名称;dir()只列出名称。

如果导入模块并在模块内运行locals()globals(),那么dir()仍然只提供少量变量;它将__file__添加到上面列出的变量中。locals()globals()也列出了相同的变量,但是在打印__builtin__的字典值的过程中,它列出了大量的变量:内置函数、异常和诸如“'type': <type 'type'>”之类的类型,而不仅仅是上面所示的简短的<module '__builtin__' (built-in)>

有关dir()的更多信息,请参见新墨西哥理工学院的Python 2.7 quick reference或ibiblio.org上的the dir() function

有关locals()globals()的更多信息,请参阅locals and globals上的Dive Into Python和一页关于globals的New Mexico Tech

[评论:@Kurt:You给出了一个指向enumerate-or-list-all-variables-in-a-program-of-your-favorite-language-here的链接,但是这个答案有一个错误。这里的问题是:type(name)在该示例中,将始终返回<type 'str'>。您确实得到了一个变量列表,它回答了问题,但旁边列出了不正确的类型。这在您的示例中并不明显,因为所有变量都碰巧是字符串;但是,它返回的是变量名称的类型,而不是变量的类型。要解决这个问题:使用print eval('type(' + name + ')'),而不是print type(name)。很抱歉在回答部分发表了评论,但我没有发表评论的权限,另一个问题已关闭。]

相关问题 更多 >