为什么这个表达式评估为false?

时间:2014-01-08 16:35:41

标签: python

我以为range()会返回一个数字列表。为什么all()函数为此

返回false
all(range(100))

2 个答案:

答案 0 :(得分:9)

您的range(100)包含0,布尔值0为False

In [1]: bool(0)
Out[1]: False

而对于任何其他数字,它评估为True。函数all仅在其参数的所有元素都计算为True时才返回True,请隐式地查看其manual(给定示例中的if语句获取每个项目的布尔值)。在这里看到包括0或不包括0的区别:

In [2]: all(range(10)) # 0..9
Out[2]: False

In [3]: all(range(1,10)) # 1..9
Out[3]: True

答案 1 :(得分:2)

因为range生成的第一个数字是0。

>>>range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 0 is evaluated to false in boolean expressions
>>>bool(0)
True

# making range start at 1
>>>all(range(1, 100))
True