为了账号安全,请及时绑定邮箱和手机立即绑定

查看所有已定义的变量

/ 猿问

查看所有已定义的变量

绝地无双 2019-08-14 17:41:01

查看所有已定义的变量

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

有办法吗,我该怎么做?


查看完整描述

3 回答

?
ABOUTYOU

你可以使用的一些东西:

  • dir() 将为您提供范围变量列表:

  • globals() 会给你一个全局变量的字典

  • locals() 会给你一个局部变量的字典


查看完整回答
反对 回复 6天前
?
扬帆大鱼

如果可能,您可能想要使用IPython


要获取所有当前用户定义变量的列表,IPython会提供一个名为魔术的命令who(除非automagic启用该功能,否则magics必须以模数字符为前缀):


In [1]: foo = 'bar'

In [2]: %who

foo

你可以使用whos魔法来获得更多细节:


In [3]: %whos

Variable   Type    Data/Info

----------------------------

foo        str     bar

还有很多其他魔法可供选择。IPython基本上是类固醇的Python解释器。一个方便的魔法是store,它允许您在会话之间保存变量(使用pickle)。


如果您有几分钟的话,请查看Jeff Rush的优秀IPython演示截屏视频


注意:我与IPython Dev无关 - 只是一个满意的用户。


查看完整回答
反对 回复 6天前
?
qq_花开花谢_0

正如RedBlueThing和模拟所说:

  • dir() 给出范围变量的列表

  • globals() 给出全局变量的字典

  • locals() 给出了局部变量的字典

使用交互式shell(版本2.6.9),创建变量后a = 1b = 2,运行dir()

['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']

跑步locals()

{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}

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 + ')')。我为在答案部分发表评论而道歉,但我没有评论发布权限,另一个问题已经关闭。


查看完整回答
反对 回复 6天前

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信