什么是最好的(惯用的)检查Python变量的类型?

问题:

我需要知道Python中的变量是字符串还是字典。以下代码有什么问题吗?

if type(x) == type(str()):
    do_something_with_a_string(x)
elif type(x) == type(dict()):
    do_somethting_with_a_dict(x)
else:
    raise ValueError

 更新:我接受了Avisser的答案(尽管如果有人解释为什么isinstance优于type(x) is,我会改变主意)。
但是感谢barefanatic提醒我,使用一个dict(作为一个case语句)比if / elif / else系列通常更干净。
让我详细说明我的用例。如果一个变量是一个字符串,我需要把它放在列表中。如果它是一个dict,我需要一个唯一值的列表。这是我想出的:

def value_list(x):
    cases = {str: lambda t: [t],
             dict: lambda t: list(set(t.values()))}
    try:
        return cases[type(x)](x)
    except KeyError:
        return None

如果isinstance是首选,那么你如何写这个value_list()函数?

回答:

如果有人将unicode字符串传递给你的函数会怎么样?还是一个派生自dict的类?还是一个实现类似dict的界面的类?以下代码涵盖前两种情况。如果您使用的是Python 2.6,您可能希望根据ABC PEP使用collections.Mapping而不是dict

def value_list(x):
    if isinstance(x, dict):
        return list(set(x.values()))
    elif isinstance(x, basestring):
        return [x]
    else:
        return None

 
 Code问答: codewenda.com
Stackoverflow:What is the best (idiomatic) way to check the type of a Python variable?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 − = 10