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

有办法吗,我该怎么做?


当前回答

要得到这些名字:

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

要得到这些值:

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

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

其他回答

更聪明一点的方法(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__')]

要得到这些名字:

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

要得到这些值:

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

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

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

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

你可以用一些东西:

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']