查看所有定义的变量

2025-01-17 09:22:00
admin
原创
9
摘要:问题描述:我目前正在用 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列出了“交互式命名空间”中的所有变量。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1043  
  IPD(Integrated Product Development,集成产品开发)是一种系统化的产品开发方法论,旨在通过跨职能团队的协作,优化产品开发的效率和质量。IPD流程强调从市场需求出发,通过并行工程、跨部门协作和阶段性评审,确保产品从概念到上市的每个环节都高效且可控。随着敏捷开发方法的普及,越来越多的企业开始...
华为IPD流程   41  
  随着企业产品开发复杂度的提升以及市场需求的快速变化,传统的产品开发模式逐渐显现出局限性。集成产品开发(IPD)流程与敏捷开发(Agile Development)作为两种主流的开发方法论,分别从系统化管理和快速响应需求的角度为企业提供了解决方案。然而,单独使用其中一种方法往往无法完全满足企业在效率、质量和创新上的多重需...
华为IPD流程   35  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司成功的关键因素之一。它不仅帮助华为在技术上实现了快速创新,还通过市场导向确保了产品的商业成功。IPD流程通过整合技术与市场双驱动,实现了从需求定义到产品交付的全生命周期管理。这种模式不仅提高了产品的开发效率,还降低了市...
IPD流程中PDCP是什么意思   32  
  在研发领域,集成产品开发(IPD)流程已经成为企业提升创新效率和市场竞争力的重要手段。然而,资源分配的不合理往往是制约IPD流程效率的关键因素之一。无论是人力资源、财务资源还是技术资源,如何高效分配直接关系到项目的成功与否。优化资源分配不仅能够缩短产品开发周期,还能降低研发成本,提升产品的市场竞争力。因此,掌握资源分配...
IPD流程中CDCP   34  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用