查看所有定义的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 = 1
和b = 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']