当前位置: 首页 > 面试题库 >

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

澹台俊达
2023-03-14
问题内容

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

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


问题答案:

如果有人将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


 类似资料:
  • 事实上中的变量比变量慢,这是众所周知的,并且已经在本网站的不同问题中讨论过了。然而,我仍然没有找到答案的一件事是,使用代码中不同函数内部使用的全局变量(如常量)的最佳和最快的方法是什么? 到目前为止,我能找到的最佳解决方案是定义一个函数,在这里我将全局变量分配给局部变量。 输出: 但这是一个丑陋的解决方案,而且比使用局部变量还要慢。在函数内部使用全局/常量变量等效的最著名的方法是什么,而不必将它们

  • 问题内容: 所以,我要做的是在特定网页上运行一个函数(与我的正则表达式匹配)。 现在,我每秒检查一次,并且它可以正常工作,但是我敢肯定,有更好的方法(因为它使网站充斥着大量请求)。 我当时想以某种方式做到这一点,但不确定如何做到。 问题答案: 我当时想用WebDriverWait做到这一点 究竟。首先,查看内置的“预期条件”是否可以解决以下问题: 用法示例: 如果不是,则可以始终创建自定义的“预期

  • 问题内容: 检查给定对象是否为给定类型的最佳方法是什么?如何检查对象是否从给定类型继承? 假设我有一个对象。如何检查是否是? 问题答案: 要检查是的实例还是的任何子类str,请使用(这是“规范”的方式): 要检查的类型是否准确(排除子类): 以下内容也可以使用,并且在某些情况下可能有用: 有关相关信息,请参见Python库参考中的内置函数。 还有一点要注意:在这种情况下,如果您使用的是Python

  • 问题内容: 这将意味着该类已初始化,但未设置变量。 示例类: 实际的类很大,我不想为每个变量检查​​if(xyz == null)。 问题答案: 尝试这样的事情: 尽管检查每个变量是否可行可能会更好。

  • 问题内容: 查看URL存在并且响应不是404的最佳方法是什么? 问题答案: 您可以使用 手册中的示例2 : 第一个数组元素将包含HTTP响应状态代码。您必须解析它。 请注意,示例中的函数将发出HTTP HEAD请求,这意味着它将不会获取URL的正文。这比使用GET请求(也将返回正文)更有效。 还要注意,通过设置 默认 上下文,任何使用http流上下文的后续调用现在都将发出HEAD请求。因此,确保完

  • 这意味着该类已初始化,但未设置变量。 示例类: 实际的类非常大,我不想检查每个变量是否(xyz==null)。