查看所有定义的variables

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

有没有办法,我该怎么做?

几件你可以使用的东西:

  • dir()会给你在范围variables的列表:
  • globals()会给你一个全局variables的字典
  • locals()会给你一个局部variables的字典

如果这是你的select,你可能想看看IPython :

要获取所有当前定义的variables的列表,请inputwho

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

您可以键入whos以获取更多详细信息:

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

还有很多其他function可用 – 基本上它是类固醇的Python解释器。 一个方便的是store命令,它可以让你在会话之间保存variables(有点像超级简单的pickle

如果您有几分钟的时间,请查看Jeff Rush的IPython演示屏幕截图:

我与IPython背后的团队没有任何关系,只是一个满意的用户。

正如RedBlueThing和模拟所说:

  • dir()给出了范围variables的列表
  • globals()给出了一个全局variables的字典
  • locals()给出了一个局部variables的字典

使用交互式shell(版本2.6.9),在创buildvariablesa = 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()完全相同的答案。

我还没有进入任何模块,所以所有的variables都可以作为本地和全局variables。 locals()globals()列出variables的值以及名称; dir()只列出名字。

如果我导入一个模块并在模块内运行locals()globals()dir()仍然只给出less量的variables; 它将__file__添加到上面列出的variables中。 locals()globals()也列出了相同的variables,但在打印出__builtin__字典值的过程中,它列出了大量的variables:内置函数,exception和types,如“ 'type': <type 'type'> “,而不仅仅是简单的<module '__builtin__' (built-in)>如上所示。

有关dir()更多信息,请参见New Mexico Tech的Python 2.7快速参考或ibiblio.org上的dir()函数 。

有关locals()globals()更多信息,请参阅Dive Into Python中的本地语言和全局语言以及New Mexico Tech中有关全局variables的页面。

[评论:@库尔特:你给了一个链接到枚举或列表中的所有variables在你的最喜欢的语言在这里,但这个答案有一个错误。 存在的问题是:在该示例中的type(name)将始终返回<type 'str'> 。 你得到一个variables列表,它回答了这个问题,但是列出了不正确的types。 这在你的例子中并不明显,因为所有的variables都是string。 然而,它返回的是variables名称的types而不是variables的types。 要解决这个问题:而不是print type(name)使用print eval('type(' + name + ')') 。 我很抱歉在回答部分发表评论,但我没有评论发布权限,而另一个问题已closures。]

获取名称:

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

获取值:

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

vars()也需要一个可选的参数来找出在一个对象本身中定义了哪些variables。

打印当地人()

编辑继续发表评论。

为了使它在打印时看起来更漂亮一些:

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

这应该给你一个更垂直的打印输出。

记住,dir()将返回所有当前的导入variables。

如果你只是想要你的variables,我会build议一个命名scheme,很容易从目录提取,如varScore,varNames等

这样,你可以简单地做到这一点:

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

编辑

如果要列出所有variables,但排除导入的模块和variables,例如:

 __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 

正如你所看到的,虽然它会显示variables“imports”,因为它是一个variables(也就是一个元组)。 一个快速的解决方法是将“imports”一词添加到导入元组本身!

在我的Python 2.7解释器中,存在于MATLAB中的whos命令在Python中存在。 它显示了与MATLAB模拟相同的细节(variables名称,types和值/数据)。

在Python解释器中, whos列出了“交互式命名空间”中的所有variables。

多一点智能(python 3)的方式:

 def printvars(): tmp = globals().copy() [print(k,' : ',v,' type:' , type(v)) for k,v in tmp.items() if not k.startswith('_') and k!='tmp' and k!='In' and k!='Out' and not hasattr(v, '__call__')] 

全局variables(),本地variables(),variables()和dir()都可以帮助你。

 def MyWho(): print [v for v in globals().keys() if not v.startswith('_')] 

这必须在交互式shell中定义。

导入os,a = 10,导入sys,MyWho()然后给出

['a','MyWho','sys','os']