如何打印出变量的名称

时间:2017-02-27 11:16:30

标签: 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_space)*

我可以用哪个真实语句替换print_it_as_name,使输出为

  

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

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

3 个答案:

答案 0 :(得分: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.

实际上这可能不是很好的做法,我会建议使用字典方法但是因为你这样做是这样的,所以这就是它的完成方式。

答案 1 :(得分:1)

正如其他人所说,使用词典。

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_') }

答案 2 :(得分:1)

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

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