为什么python all()函数为元组返回true?

时间:2016-02-25 13:05:04

标签: python python-3.x

我知道当iterable的所有元素都为true时,内置all()函数返回true。但是当我创建一个元组并给它2个随机整数作为元素时,它返回true。这是为什么?

例如:

tup = 1234 , 5678

并在其上调用all()函数:

print ( all(t) ) 
>>> True 

我很困惑,因为我认为python只能在执行布尔操作时返回true或false。

但我没有执行布尔操作,我只给了all() 2个整数。我没有说例如2>= 1。为什么all()为我的元组返回true?或者这只是默认答案?

3 个答案:

答案 0 :(得分:4)

任何非零数字或非空序列的评估结果为True

In [1]: bool(123)
Out[1]: True

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

In [3]: bool("0")
Out[3]: True

In [4]: bool("")
Out[4]: False

In [5]: bool([0])
Out[5]: True

In [6]: bool([])
Out[6]: False

等。这使您可以编写优雅,简洁的语句,如

if score:

而不是

if score != 0:

if sequence:

而不是

if len(sequence) > 0:

答案 1 :(得分:1)

1.def all(iterable):
2.    for element in iterable:
3.        if not element:
4.            return False
5.    return True

这是python中内置所有函数的定义。在你的情况下,第3行中的元素不能返回false。

答案 2 :(得分:1)

假设," Python只能在执行布尔运算时返回true或false"是不正确的。

Python库中定义的对象:NoneFalse00L0.00j,{{1} },''()[]被视为{}。任何其他值(或对象,甚至类和函数)都被视为True。阅读:Truth Value Testing

因此,以下两个都是False

True

all(single_parameter_iterator)是Python中的一个方法,如果迭代器的所有值都传递给它,则返回true。 阅读:all() method in Python

什么是迭代器?

  • 我们使用tup = 1234 , 5678 if(tup): print 'True' >> True def a_func(): print 'This is a function' if(a_func): print 'True' >> True 来循环列表。
  • 如果我们将其与for statement一起使用,则会循环播放其字符。
  • 如果我们将其与string一起使用,则会在其键上循环。
  • 如果我们将它与dictionary一起使用,它会循环遍历文件的行。

来源:Iterators in Python

你自己已经给出了答案:

  

"我知道内置函数all()在所有时都返回true   可迭代的元素是真的。"