在以下代码段中:
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语句对其进行硬编码?
答案 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])