【发布时间】:2013-02-22 08:28:31
【问题描述】:
设计一个等价于以下语句的逻辑表达式:
x是三五个元素的列表,其中第二个元素是 字符串'Hip',其中第一个不是数字或布尔值。
我有什么:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
我的问题:如何检查它是布尔值还是数字?
【问题讨论】:
标签: python python-2.7
设计一个等价于以下语句的逻辑表达式:
x是三五个元素的列表,其中第二个元素是 字符串'Hip',其中第一个不是数字或布尔值。
我有什么:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
我的问题:如何检查它是布尔值还是数字?
【问题讨论】:
标签: python python-2.7
我想说的最简单:
type(x) == type(True)
【讨论】:
type(x) is bool?
type创建pylint消息:C0123: Using type() instead of isinstance() for a typecheck. (unidiomatic-typecheck)正确答案需要被接受
在 python3 中,这将是:type(x)==bool 参见 example。
【讨论】:
回答具体问题:
isinstance(x[0], (int, float))
这会检查 x[0] 是否是元组 (int, float) 中任何类型的实例。
您也可以在其中添加bool,但这不是必需的,因为bool 本身就是int 的子类。
文档参考:
要评论您当前的代码,您不应依赖interning of short strings。您应该使用== 运算符比较字符串:
x[1] == 'Hip'
【讨论】:
Python 2
import types
x = False
print(type(x) == types.BooleanType) # True
Python 3
# No need to import types module
x = False
print(type(x) == bool) # True
【讨论】:
types.BooleanType 已从 Python 3 中删除。改为使用 bool。来源:diveintopython3.net/…
我喜欢保持简单易读.. 这将接受 bool、string、number 并将其读入 bool
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
【讨论】:
您应该将x 的类型与bool 类进行比较:
type(x) == bool
或:
type(x) == type(True)
这里有更多关于type method
布尔值(布尔值)
这些代表真值 False 和 True。表示值 False 和 True 的两个对象是唯一的布尔对象。布尔类型是整数类型的子类型,布尔值在几乎所有上下文中的行为分别类似于值 0 和 1,但转换为字符串时返回字符串“False”或“True”的例外情况,分别。
【讨论】:
我按照最近的回答谁告诉使用type,根据pylint验证,这似乎是不正确的方式:
我收到了消息:
C0123:使用 type() 而不是 isinstance() 进行类型检查。 (unidiomatic-typecheck)
即使这是一个旧答案,正确的答案也是@Lev Levitsky 的公认答案:
isinstance(x[0], (int, float))
【讨论】: