Python 如何打印变量的名称

Python 如何打印变量的名称,python,opencv,Python,Opencv,在以下代码段中: 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_s

在以下代码段中:

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_作为_name,以便输出

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


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

好的,我想出了一个小技巧,用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.

实际上这样做可能不是很好的做法,我建议使用字典法,但既然你是这样要求的,这就是它的实现方式。

正如其他人建议的,使用dict

import cv2
data = { 'cv2.'+att : getattr(cv2, att)
         for att in ('COLOR_RGB2HSV','COLOR_RGB2LUV',...) }
print(data.keys())
如果需要所有颜色属性,可以避免硬编码列表:

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

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

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])

用引号把它括起来好吗?如果你想动态地处理变量,你可以始终使用它们的名称作为字符串,并通过getattr获得相应的值。但我忍不住觉得这里有一个更深层次的问题,通常的答案是使用dict。确切地说,我已经相应地更新了这个问题。我的错:我在第一篇文章中没有告诉你整个问题。请看编辑。啊,很抱歉再次违反了游戏规则:但如果我不想使用实际的语句cv2.COLOR_RGB2HSV,我就不麻烦了。。。代码的后面部分。所以我真的想重复这些。python中没有反射模块吗?@user1934212抱歉,我不知道^^@MukeshIngham这不是eval的好用例,您应该使用getattr。谢谢,但这不是重点。我想迭代这些值并在代码中使用这些值,但也要打印出这些值的名称。@user1934212我明白了。看看我的另一个答案吧。