关于python:如何打印出变量的名称

How to print out the name of a variable

本问题已经有最佳答案,请猛点这里访问。

在以下代码段中:

1
2
3
4
5
6
7
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语句对其进行硬编码?


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

1
2
3
4
5
6
7
8
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])


如其他人建议的,使用听写。

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

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

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


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

1
2
3
4
5
6
7
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.

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