检查Python变量类型的最佳(惯用方式)是什么?[重复]

发布于 2021-01-29 15:01:58

这个问题已经在这里有了答案

type()和isinstance()有什么区别? (7个答案)

7年前关闭。

我需要知道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)。

但是要感谢Nakedfanatic提醒我,使用dict(作为案例陈述)通常比使用if / elif / else系列更干净。

让我详细说明一下我的用例。如果变量是字符串,则需要将其放在列表中。如果是字典,我需要一个唯一值列表。这是我想出的:

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()功能?

关注者
0
被浏览
102
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果有人将unicode字符串传递给您的函数会怎样?还是从dict派生的类?还是实现类似dict的接口的类?以下代码涵盖了前两种情况。如果您使用的是Python
    2.6,则可能要使用collections.Mapping而不是dict按照ABC
    PEP

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看