Red*_*ing 330
你可以使用的一些东西:
dir() 将为您提供范围变量列表:globals() 会给你一个全局变量的字典locals() 会给你一个局部变量的字典Chr*_*lor 202
如果可能,您可能想要使用IPython.
要获取所有当前用户定义变量的列表,IPython会提供一个名为魔术的命令who(除非automagic启用该功能,否则magics必须以模数字符为前缀):
In [1]: foo = 'bar'
In [2]: %who
foo
Run Code Online (Sandbox Code Playgroud)
你可以使用whos魔法来获得更多细节:
In [3]: %whos
Variable Type Data/Info
----------------------------
foo str bar
Run Code Online (Sandbox Code Playgroud)
还有很多其他魔法可供选择.IPython基本上是类固醇的Python解释器.一个方便的魔法是store,它允许您在会话之间保存变量(使用pickle).
如果您有几分钟的话,请查看Jeff Rush的优秀IPython演示截屏视频.
注意:我与IPython Dev无关 - 只是一个满意的用户.
Lin*_*ist 44
正如RedBlueThing和模拟所说:
dir() 给出范围变量的列表globals() 给出全局变量的字典locals() 给出了局部变量的字典使用交互式shell(版本2.6.9),创建变量后a = 1和b = 2,运行dir()给
['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']
Run Code Online (Sandbox Code Playgroud)
跑步locals()给
{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
Run Code Online (Sandbox Code Playgroud)
Running globals()给出的答案与locals()本例完全相同.
我没有进入任何模块,因此所有变量都可用作本地和全局变量. locals()并globals()列出变量的值以及名称; dir()只列出名称.
如果我导入模块并运行locals()或globals()在模块内部,dir()仍然只提供少量变量; 它增加__file__了上面列出的变量.locals()并globals()列出相同的变量,但在打印出字典值的过程中__builtin__,它列出了更多的变量:内置函数,异常和类型如" 'type': <type 'type'>",而不仅仅是<module '__builtin__' (built-in)>如上所示的简要.
有关更多信息,dir()请参阅New Mexico Tech的Python 2.7快速参考或ibiblio.org 的dir()函数.
有关详细信息locals(),globals()请参阅Dive Into Python中的locals和globals以及有关New Mexico Tech的全局变量的页面.
[评论:@Kurt:你给了一个枚举或列表所有变量在你最喜欢的语言程序中的链接 -但这个答案有错误.问题在于: type(name)在那个例子中总会返回<type 'str'>.您确实得到了一个变量列表,它们回答了问题,但旁边列出的类型不正确.这在你的例子中并不明显,因为无论如何所有的变量都是字符串; 然而,它返回的是变量名称的类型而不是变量的类型.解决这个问题:而不是print type(name)使用print eval('type(' + name + ')').我为在答案部分发表评论而道歉,但我没有评论发布权限,另一个问题已经关闭.
Bri*_*ndy 35
获取名称:
for name in vars().keys():
print(name)
Run Code Online (Sandbox Code Playgroud)
获取值:
for value in vars().values():
print(value)
Run Code Online (Sandbox Code Playgroud)
vars()还使用可选参数来找出在对象本身中定义的哪些变量.
Har*_*old 14
打印当地人()
编辑继续评论.
为了使它在打印时看起来更漂亮:
import sys, pprint
sys.displayhook = pprint.pprint
locals()
Run Code Online (Sandbox Code Playgroud)
这应该会给你一个更垂直的打印输出.
Joh*_*n T 10
请记住,dir()将返回所有当前导入的AND变量.
如果你只是想要你的变量,我会建议一个易于从dir中提取的命名方案,例如varScore,varNames等.
这样,你可以简单地这样做:
for vars in dir():
if vars.startswith("var"):
print vars
Run Code Online (Sandbox Code Playgroud)
编辑
如果要列出所有变量,但排除导入的模块和变量,例如:
__builtins__
Run Code Online (Sandbox Code Playgroud)
你可以使用这样的东西:
import os
import re
x = 11
imports = "os","re"
for vars in dir():
if vars.startswith("__") == 0 and vars not in imports:
print vars
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它会显示变量"imports",因为它是一个变量(好吧,一个元组).一个快速的解决方法是将"进口"一词添加到导入元组本身!
jam*_*amk 10
更聪明(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__')]
Run Code Online (Sandbox Code Playgroud)
小智 8
这必须在交互式 shell 中定义:
def MyWho():
print [v for v in globals().keys() if not v.startswith('_')]
Run Code Online (Sandbox Code Playgroud)
那么下面的代码就可以作为例子:
>>> import os
>>> import sys
>>> a = 10
>>> MyWho()
['a', 'MyWho', 'sys', 'os']
Run Code Online (Sandbox Code Playgroud)
whos在我的 Python 2.7 解释器中, Python 中也存在 MATLAB 中存在的相同命令。它显示与 MATLAB 模拟相同的详细信息(变量名称、类型和值/数据)。
请注意,在Python解释器中,whos列出了“交互式命名空间”中的所有变量。