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)* |
我可以用哪个实语句替换
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()) |
号
如果需要所有
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. |
实际上,这样做可能不是很好的实践,我建议使用字典方法,但是既然您这样要求它,这就是它的做法。