【问题标题】:How to print out the name of a variable [duplicate]如何打印出变量的名称[重复]
【发布时间】:2017-02-27 11:16:29
【问题描述】:

在下面的代码sn-p中:

import cv2
for color_space in (cv2.COLOR_RGB2HSV,
                    cv2.COLOR_RGB2LUV,
                    cv2.COLOR_RGB2HLS,
                    cv2.COLOR_RGB2YUV,
                    cv2.COLOR_RGB2YCrCb):   
    *print_it_as_name(color_space)*

我可以用哪个真实的语句替换print_it_as_name,这样输出是

cv2.COLOR_RGB2HSV cv2.COLOR_RGB2LUV cv2.COLOR_RGB2HLS cv2.COLOR_RGB2YUV, cv2.COLOR_RGB2YCrCb

不使用 if 语句对其进行硬编码?

【问题讨论】:

  • 用引号括起来''?如果您想动态处理变量,您可以随时将它们的名称用作字符串并通过getattr 获取相应的值。
  • 但我不禁觉得这里有一个更深层次的问题,通常的答案是“使用字典”。
  • 没错,我已经相应地更新了问题。

标签: python opencv


【解决方案1】:

好的,我想出了一个小技巧来使用 eval 解决这个问题:

for color_space in ("cv2.COLOR_RGB2HSV",
                    "cv2.COLOR_RGB2LUV",
                    "cv2.COLOR_RGB2HLS",
                    "cv2.COLOR_RGB2YUV",
                    "cv2.COLOR_RGB2YCrCb"):   
    print(color_space) # prints the name of the variable
    print(eval(color_space)) # prints the actual value of the variable.

实际执行此操作可能不是一个好习惯,我会推荐字典方法,但既然您这样要求它,这就是它的完成方式。

【讨论】:

  • 我的错:我没有在我的第一篇文章中告诉你整个问题。请查看编辑。
  • 抱歉再次更改游戏规则:但我不会打扰,如果我不想在代码后面使用实际语句 cv2.COLOR_RGB2HSV...。所以我真的很想迭代这些。 python中没有反射模块吗?
  • @user1934212 抱歉,我不知道 ^^
  • @MukeshIngham 这不是eval 的好用例,您应该改用getattr
【解决方案2】:

按照其他人的建议,使用字典。

import cv2
data = { 'cv2.'+att : getattr(cv2, att)
         for att in ('COLOR_RGB2HSV','COLOR_RGB2LUV',...) }
print(data.keys())

如果你需要所有COLOR_*属性,你可以避免硬编码列表:

data = { ... for att in dir(cv2) if att.startswith('COLOR_') }

【讨论】:

  • 谢谢,但这不是重点。我想遍历这些值并稍后在代码中使用这些值,但还要打印出这些值的名称。
  • @user1934212 我明白了。看看我的其他答案。
【解决方案3】:

使用反向映射,从值映射到其原始名称(假设值是唯一的)。

import cv2
reverse_map = { v:k for k,v in dir(cv2) if k.startswith('COLOR_') }
for color_space in (cv2.COLOR_RGB2HSV,
                    cv2.COLOR_RGB2LUV,
                    cv2.COLOR_RGB2HLS,
                    cv2.COLOR_RGB2YUV,
                    cv2.COLOR_RGB2YCrCb):   
    print(reverse_map[color_space])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多