import types


def is_variable(tup):
    """ Takes (name, object) tuple, returns True if it is a variable.
    """
    name, item = tup
    # callable()
    # 函数用于检查一个对象是否是可调用的。如果返回True，object仍然可能调用失败；
    # 但如果返回False，调用对象ojbect绝对不会成功。
    # 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__
    # 方法的类实例, 它都返回 True。
    if callable(item):
        # function or class
        return False

    if isinstance(item, types.ModuleType):
        # imported module
        return False

    if name.startswith("_"):
        # private property
        return False

    return True