查看所有定义的变量

2025-01-17 09:22:00
admin
原创
92
摘要:问题描述:我目前正在用 python shell 进行计算。我想要的是 Matlab 样式的列表,您可以在其中看到到目前为止已定义的所有变量(这样我就知道我使用了哪些名称、它们的值等)。有什么办法吗?我该怎么做?解决方案 1:您可以使用以下一些东西:dir()将为您提供范围内变量的列表globals()将为您...

问题描述:

我目前正在用 python shell 进行计算。我想要的是 Matlab 样式的列表,您可以在其中看到到目前为止已定义的所有变量(这样我就知道我使用了哪些名称、它们的值等)。

有什么办法吗?我该怎么做?


解决方案 1:

您可以使用以下一些东西:

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

  • globals()将为您提供全局变量的词典

  • locals()将为您提供局部变量的字典

解决方案 2:

如果可能的话,您可能想要使用IPython。

为了获取所有当前用户定义变量的列表,IPython 提供了一个名为magic 命令(除非启用该功能,否则whomagics 必须以字符为前缀):%`automagic`

In [1]: foo = 'bar'
In [2]: %who
foo

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

In [3]: %whos
Variable   Type    Data/Info
----------------------------
foo        str     bar

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

注意:我与 IPython Dev 没有任何关系 - 只是一个满意的用户。

编辑:

您可以在IPython 文档中找到所有魔法命令。

本文还包含有关在 Jupyter Notebook 中使用魔法命令的有用部分

解决方案 3:

获取名称:

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

获取值:

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

vars() 还采用可选参数来找出对象本身内定义的变量。

解决方案 4:

正如 RedBlueThing 和 analog 所说:

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

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

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

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

['__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)>`

有关详细信息,dir()请参阅新墨西哥理工学院的Python 2.7 快速参考或 ibiblio.org 上的dir() 函数。

要了解更多信息locals()globals()请参阅Dive Into Python 中的局部变量和全局变量以及新墨西哥理工学院的全局变量页面。

[评论:@Kurt:您在此处提供了一个枚举或列出您最喜欢的语言程序中的所有变量的链接,但该答案有错误。那里的问题是: type(name)在该示例中将始终返回<type 'str'>。您确实获得了变量列表,它回答了问题,但旁边列出了错误的类型。这在您的示例中并不明显,因为所有变量碰巧都是字符串;但是,它返回的是变量名称的类型,而不是变量的类型。要解决此问题:而不是print type(name)使用print eval('type(' + name + ')')。我很抱歉在答案部分发表评论,但我没有发表评论的权限,另一个问题已关闭。]

解决方案 5:

print locals()

编辑继续评论。

为了使打印时看起来更漂亮:

import sys, pprint
sys.displayhook = pprint.pprint
locals()

这将会给你一个更加垂直的打印输出。

解决方案 6:

globals()、、、都希望能帮助您locals()实现您的愿望。vars()`dir()`

解决方案 7:

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

解决方案 8:

请记住dir()将返回所有当前导入变量。

如果您只想要变量,我建议使用一种易于提取的命名方案dir,例如varScorevarNames等等。

这样,您就可以简单地执行以下操作:

for vars in dir():
 if vars.startswith("var"):
   print vars

编辑

如果您想列出所有变量,但排除导入的模块和变量,例如:

__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 元组本身中!

解决方案 9:

这必须在交互式 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']

解决方案 10:

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

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用