获取给定结构的所有对象及其全局名称

时间:2016-01-17 02:50:38

标签: python python-2.7

假设我有以下对象:

gray       =    (132, 132, 132)
green      =    (0, 104, 0)
red        =    (168, 0, 68)

如何获取此表单的所有globals()(RGB)以及相应对象的名称?

2 个答案:

答案 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正在做的事情,但只是以压缩的方式。