假设我有以下对象:
gray = (132, 132, 132)
green = (0, 104, 0)
red = (168, 0, 68)
如何获取此表单的所有globals()
(RGB)以及相应对象的名称?
答案 0 :(得分:3)
使用isinstance
,您可以检查对象的类型。使用vars
,您将获得变量名称到值的映射。
gray = (132, 132, 132)
green = (0, 104, 0)
red = (168, 0, 68)
somethingelse = 0
for key, value in vars().items():
is_rgb = (
isinstance(value, tuple) and
len(value) == 3 and
all(isinstance(x, int) for x in value)
)
if is_rgb:
print(key)
另一种方式:try-except
gray = (132, 132, 132)
green = (0, 104, 0)
red = (168, 0, 68)
somethingelse = 0
for key, value in vars().items():
try:
_, _, _ = value
if isinstance(value, tuple):
print(key)
except (TypeError, ValueError):
pass
答案 1 :(得分:2)
以下快捷方式如何?
ls = [(key, value) for key, value in globals().items() if isinstance(value, tuple) and len(value) == 3]
创建包含颜色的元组列表。
修改强>:
之前的解决方案也会匹配格式
的元组("hello", "blah", 7)
也就是说,元素也可能不是int
的元组。
要防止这种情况,请使用以下解决方案,该解决方案仅接受元素全部为int
s的元组。
ls = [(key, value) for key, value in globals().items() if isinstance(value, tuple) and len(value) == 3 and all(isinstance(e, int) for e in value) ]
这类似于falsetru正在做的事情,但只是以压缩的方式。