我目前正在python shell中进行计算。我想要的是Matlab风格的列表,在那里你可以看到所有已经定义到某一点的变量(所以我知道我使用了哪些名称,它们的值等等)。
有办法吗,我该怎么做?
我目前正在python shell中进行计算。我想要的是Matlab风格的列表,在那里你可以看到所有已经定义到某一点的变量(所以我知道我使用了哪些名称,它们的值等等)。
有办法吗,我该怎么做?
当前回答
要得到这些名字:
for name in vars().keys():
print(name)
要得到这些值:
for value in vars().values():
print(value)
Vars()还接受一个可选参数,以确定对象本身中定义了哪些Vars。
其他回答
打印当地人()
编辑继续评论。
为了在打印时看起来更漂亮:
import sys, pprint
sys.displayhook = pprint.pprint
locals()
这样打印出来的效果会更垂直。
这必须在交互式shell中定义:
def MyWho():
print [v for v in globals().keys() if not v.startswith('_')]
以下面的代码为例:
>>> import os
>>> import sys
>>> a = 10
>>> MyWho()
['a', 'MyWho', 'sys', 'os']
如果可能,您可能希望使用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中使用魔法命令的有用部分
Globals()、locals()、vars()和dir()都可以帮到你。
更聪明一点的方法(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__')]
或者如果你想输出一个对象的变量:
def printObj(Obj, OutputMax=100):
tmp = Obj.__dict__
[print(k,' : ',str(v)[:OutputMax],' 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__')]