2024-04-25 00:27:52 发布
网友
我目前正在用python shell进行计算。我想要的是一个Matlab风格的列表,在这里你可以看到所有的变量已经被定义到一个点(所以我知道我用了哪些名字,它们的值等等)。
有办法吗?我该怎么办?
你可以使用一些东西:
dir()
globals()
locals()
如果可能,您可能需要使用IPython。
要获取所有当前用户定义变量的列表,IPython提供名为who的magic命令(magics必须以模字符作为前缀,除非启用了automagic功能):
who
automagic
In [1]: foo = 'bar' In [2]: %who foo
您可以使用whos魔术获得更多详细信息:
whos
In [3]: %whos Variable Type Data/Info ---------------------------- foo str bar
有很多其他的魔法可以使用。IPython基本上是使用类固醇的Python解释器。一个方便的魔术是store,它允许您在会话之间保存变量(使用pickle)。
store
pickle
注意:我与IPython Dev没有关联-只是一个满意的用户。
编辑:
您可以在IPython Documentation中找到所有的魔法命令。
This article还有一个关于在Jupyter笔记本中使用magic命令的有用部分
正如RedBlueThing和analog所说:
使用交互式shell(版本2.6.9),在创建变量a = 1和b = 2之后,运行dir()将给出
a = 1
b = 2
['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']
运行locals()给出
{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
运行globals()给出的答案与本例中的locals()完全相同。
我还没有进入任何模块,所以所有变量都可以作为局部和全局变量使用。locals()和globals()列出变量值和名称;dir()只列出名称。
如果导入模块并在模块内运行locals()或globals(),那么dir()仍然只提供少量变量;它将__file__添加到上面列出的变量中。locals()和globals()也列出了相同的变量,但是在打印__builtin__的字典值的过程中,它列出了大量的变量:内置函数、异常和诸如“'type': <type 'type'>”之类的类型,而不仅仅是上面所示的简短的<module '__builtin__' (built-in)>。
__file__
__builtin__
'type': <type 'type'>
<module '__builtin__' (built-in)>
有关dir()的更多信息,请参见新墨西哥理工学院的Python 2.7 quick reference或ibiblio.org上的the dir() function。
有关locals()和globals()的更多信息,请参阅locals and globals上的Dive Into Python和一页关于globals的New Mexico Tech
[评论:@Kurt:You给出了一个指向enumerate-or-list-all-variables-in-a-program-of-your-favorite-language-here的链接,但是这个答案有一个错误。这里的问题是:type(name)在该示例中,将始终返回<type 'str'>。您确实得到了一个变量列表,它回答了问题,但旁边列出了不正确的类型。这在您的示例中并不明显,因为所有变量都碰巧是字符串;但是,它返回的是变量名称的类型,而不是变量的类型。要解决这个问题:使用print eval('type(' + name + ')'),而不是print type(name)。很抱歉在回答部分发表了评论,但我没有发表评论的权限,另一个问题已关闭。]
type(name)
<type 'str'>
print eval('type(' + name + ')')
print type(name)
你可以使用一些东西:
dir()
将提供范围内变量的列表:globals()
将为您提供一个全局变量字典locals()
将为您提供一个局部变量字典如果可能,您可能需要使用IPython。
要获取所有当前用户定义变量的列表,IPython提供名为
who
的magic命令(magics必须以模字符作为前缀,除非启用了automagic
功能):您可以使用
whos
魔术获得更多详细信息:有很多其他的魔法可以使用。IPython基本上是使用类固醇的Python解释器。一个方便的魔术是
store
,它允许您在会话之间保存变量(使用pickle
)。注意:我与IPython Dev没有关联-只是一个满意的用户。
编辑:
您可以在IPython Documentation中找到所有的魔法命令。
This article还有一个关于在Jupyter笔记本中使用magic命令的有用部分
正如RedBlueThing和analog所说:
dir()
提供范围内变量的列表globals()
提供全局变量字典locals()
给出了一个局部变量字典使用交互式shell(版本2.6.9),在创建变量
a = 1
和b = 2
之后,运行dir()
将给出运行
locals()
给出运行
globals()
给出的答案与本例中的locals()
完全相同。我还没有进入任何模块,所以所有变量都可以作为局部和全局变量使用。
locals()
和globals()
列出变量值和名称;dir()
只列出名称。如果导入模块并在模块内运行
locals()
或globals()
,那么dir()
仍然只提供少量变量;它将__file__
添加到上面列出的变量中。locals()
和globals()
也列出了相同的变量,但是在打印__builtin__
的字典值的过程中,它列出了大量的变量:内置函数、异常和诸如“'type': <type 'type'>
”之类的类型,而不仅仅是上面所示的简短的<module '__builtin__' (built-in)>
。有关
dir()
的更多信息,请参见新墨西哥理工学院的Python 2.7 quick reference或ibiblio.org上的the dir() function。有关
locals()
和globals()
的更多信息,请参阅locals and globals上的Dive Into Python和一页关于globals的New Mexico Tech[评论:@Kurt:You给出了一个指向enumerate-or-list-all-variables-in-a-program-of-your-favorite-language-here的链接,但是这个答案有一个错误。这里的问题是:
type(name)
在该示例中,将始终返回<type 'str'>
。您确实得到了一个变量列表,它回答了问题,但旁边列出了不正确的类型。这在您的示例中并不明显,因为所有变量都碰巧是字符串;但是,它返回的是变量名称的类型,而不是变量的类型。要解决这个问题:使用print eval('type(' + name + ')')
,而不是print type(name)
。很抱歉在回答部分发表了评论,但我没有发表评论的权限,另一个问题已关闭。]相关问题 更多 >
编程相关推荐