【问题标题】:Why does python all() function return true for a tuple?为什么 python all() 函数对元组返回 true?
【发布时间】:2016-06-08 06:40:34
【问题描述】:

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

例如:

tup = 1234 , 5678

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

print ( all(t) ) 
>>> True 

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

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

【问题讨论】:

  • bool(a) 对于除0 之外的所有整数a 计算为True
  • 而不是True,想想truthy(对于这意味着什么的常见Python定义)。

标签: python python-3.x


【解决方案1】:

任何非零数或非空序列的计算结果为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:

【讨论】:

  • 另外:bool(None)False。这可能经常出现。
【解决方案2】:
1.def all(iterable):
2.    for element in iterable:
3.        if not element:
4.            return False
5.    return True

这是python中内置all函数的定义。在您的情况下,第 3 行中的 not element 必须返回 false。

【讨论】:

    【解决方案3】:

    假设“Python 只能在执行布尔运算时返回真或假”是不正确的。

    Python库中定义的对象:NoneFalse00L0.00j''()[]、@987654是3个考虑False。任何其他值(或对象,甚至类和函数)都被认为是 True。阅读:Truth Value Testing

    因此,以下两个都是True

    tup = 1234 , 5678
    if(tup):
        print 'True'
    >> True
    
    def a_func():
        print 'This is a function'
    if(a_func):
        print 'True'
    >> True
    

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

    什么是迭代器?

    • 我们使用for statement 循环列表。
    • 如果我们将它与string 一起使用,它会循环遍历其字符。
    • 如果我们将它与 dictionary 一起使用,它会循环遍历其键。
    • 如果我们将它与file 一起使用,它会遍历文件的行。

    来源:Iterators in Python

    你自己已经给出了答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 2013-10-15
      • 2019-10-04
      • 2018-01-28
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2019-04-27
      相关资源
      最近更新 更多