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

有办法吗,我该怎么做?


当前回答

在我的Python 2.7解释器中,MATLAB中存在的whoos命令也存在于Python中。它显示了与MATLAB模拟相同的细节(变量名、类型和值/数据)。

请注意,在Python解释器中,它列出了“交互式名称空间”中的所有变量。

其他回答

你可以用一些东西:

Dir()将为您提供范围内变量的列表 Globals()将为您提供一个全局变量字典 Locals()将为您提供一个局部变量字典

打印当地人()

编辑继续评论。

为了在打印时看起来更漂亮:

import sys, pprint
sys.displayhook = pprint.pprint
locals()

这样打印出来的效果会更垂直。

如果可能,您可能希望使用IPython。

为了获得当前所有用户定义变量的列表,IPython提供了一个名为who的magic命令(magics必须以%字符作为前缀,除非启用了automagic特性):

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

你可以使用whos魔术来获得更多细节:

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

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

注意:我没有与IPython开发-只是一个满意的用户。

编辑:

你可以在IPython文档中找到所有神奇的命令。

本文还有一个关于在Jupyter Notebook中使用魔法命令的有用部分

请记住,dir()将返回所有当前导入和变量。

如果你只是想要你的变量,我会建议一个容易从dir提取的命名方案,如varScore, varNames等。

这样,你可以简单地这样做:

for vars in dir():
 if vars.startswith("var"):
   print vars

Edit

如果你想列出所有变量,但排除导入的模块和变量,例如:

__builtins__

你可以这样使用:

import os
import re

x = 11
imports = "os","re"

for vars in dir():
    if vars.startswith("__") == 0 and vars not in imports:
        print vars

正如您所看到的,它将显示变量“imports”,因为它是一个变量(嗯,一个元组)。一个快速的解决方法是将单词“imports”添加到imports元组本身!

要得到这些名字:

for name in vars().keys():
  print(name)

要得到这些值:

for value in vars().values():
  print(value)

Vars()还接受一个可选参数,以确定对象本身中定义了哪些Vars。