我目前正在python shell中进行计算。我想要的是Matlab风格的列表,在那里你可以看到所有已经定义到某一点的变量(所以我知道我使用了哪些名称,它们的值等等)。
有办法吗,我该怎么做?
我目前正在python shell中进行计算。我想要的是Matlab风格的列表,在那里你可以看到所有已经定义到某一点的变量(所以我知道我使用了哪些名称,它们的值等等)。
有办法吗,我该怎么做?
当前回答
请记住,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元组本身!
其他回答
你可以用一些东西:
Dir()将为您提供范围内变量的列表 Globals()将为您提供一个全局变量字典 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']
在我的Python 2.7解释器中,MATLAB中存在的whoos命令也存在于Python中。它显示了与MATLAB模拟相同的细节(变量名、类型和值/数据)。
请注意,在Python解释器中,它列出了“交互式名称空间”中的所有变量。
打印当地人()
编辑继续评论。
为了在打印时看起来更漂亮:
import sys, pprint
sys.displayhook = pprint.pprint
locals()
这样打印出来的效果会更垂直。
更聪明一点的方法(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__')]