【问题标题】:Get a list of all possible variable names corresponding to an object in python [duplicate]获取与python中的对象对应的所有可能变量名的列表[重复]
【发布时间】:2018-02-12 20:15:30
【问题描述】:

假设我定义了这些变量

a=1
b="2"
c=2
d=2
e="2"

我需要一种方法来获取可以与我指定的对象配对的所有变量名。例如,如果我指定“2”,它应该返回 [“b”,“e”],因为它们是值为“2”的两个变量。如果我指定整数 2,它应该给我 ["c","d"]。有没有办法做到这一点?我也在寻找pythonic的答案。

【问题讨论】:

  • 有什么理由不能使用字典? (myobjects['a'] = 1myobjects['b'] = "2" 等)这将更容易使用。
  • 没有pythonic方法可以做到这一点,您必须检查所有可能的名称空间中所有可能的名称:对象对以获得一般答案。如果您可以限制为名称空间,例如globals 然后你可以检查那个命名空间。一般来说,你不应该依赖这种东西,除非你正在构建一个调试器或其他东西
  • @juanpa.arrivillaga 您标记的副本与我提出的问题几乎无关
  • @Qwerty 当然可以,它是关于从对象中检索变量名作为字符串。
  • @juanpa.arrivillaga 这不是重复的,因为该问题没有我的问题的答案

标签: python python-3.x


【解决方案1】:

对于全局变量,扫描globals() 字典并提取具有您要查找的值的变量:

a=1
b="2"
c=2
d=2
e="2"

print([k for k,v in globals().items() if v=="2"])

结果:

['e', 'b']

使用locals() 的本地人也是如此。要测试局部变量和全局变量,请链接两个 dict 项并使用 set,因为值会根据范围重复:

{k for k,v in itertools.chain(locals().items(),globals().items()) if v=="2"}

【讨论】:

  • 谢谢!这正是我想要的。
猜你喜欢
  • 2017-05-08
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2012-11-11
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多