检查对象是数字还是布尔值

时间:2013-02-22 08:28:31

标签: python python-2.7

  

设计一个等同于以下语句的逻辑表达式:

     

x是三个或五个元素的列表,其中第二个元素是   字符串'Hip',其中第一个不是数字或布尔值。

我有什么:

x = ['Head', 'Hip', 10]
print x[1] is 'Hip'

我的问题:你如何检查它是否是布尔值或数字?

7 个答案:

答案 0 :(得分:40)

回答具体问题:

isinstance(x[0], (int, float))

检查x[0]是否是元组(int, float)中任何类型的实例。

您也可以在其中添加bool,但这不是必需的,因为bool本身就是int的子类。

文档参考:


要评论您当前的代码,您不应该依赖interning of short strings。您应该将字符串与==运算符进行比较:

x[1] == 'Hip'

答案 1 :(得分:22)

我想说的最简单:

type(x) == type(True)

答案 2 :(得分:10)

在python3中,这将是:type(x)==boolexample

答案 3 :(得分:5)

import types
type(x) == types.BooleanType

答案 4 :(得分:2)

您应该将x的类型与bool类进行比较:

type(x) == bool

或:

type(x) == type(True)

type method

上的内容更多

来自Data model docs

  

布尔值(布尔)

     

这些代表真值False和True。表示值False和True的两个对象是唯一的布尔对象。布尔类型是整数类型的子类型,并且布尔值在几乎所有上下文中的行为分别类似于值0和1,不同之处在于,当转换为字符串时,将返回字符串“ False”或“ True”分别。

答案 5 :(得分:0)

我遵循最近的回答,告诉他们使用type,根据pylint验证,这似乎是错误的方式:

我收到消息:

  

C0123:使用type()代替isinstance()进行类型检查。   (单字型检查)

即使是旧答案,正确的答案也是@Lev Levitsky的公认答案:

isinstance(x[0], (int, float))

答案 6 :(得分:0)

我喜欢保持简单易读。 这将接受布尔值,字符串,数字并将其读取为布尔值

def var2bool(v):
if type(v) == type(True):
    res = v
elif type(v) == type(0):
    if v == 0:
        res = False
    else:
        res = True
elif v.lower() in ("yes", "true", "t", "1"):
    res = True
else:
    res = False
return res