【问题标题】:Python all([6,7,8,9]) = True. But 6 = False [duplicate]Python all([6,7,8,9]) = 真。但是 6 = 错误 [重复]
【发布时间】:2017-05-30 12:52:58
【问题描述】:

我对 all() 运算符的理解是,如果可迭代的 所有 元素返回 true 值,它会返回 true。要么我完全误解了它的功能,要么以下内容不太正确:

>>> all([0, 7, 8, 9])
False
>>> all([6, 7, 8, 9])
True
>>> any([0, 7, 8, 9])
True
>>> 0 == True
False
>>> 1 == True
True
>>> 6 == True
False
>>> 7 == True
False

这是怎么回事?

编辑 好的,我得到了很多解释 0 是错误的答案。我明白了。 0 = 假,1 = 真。 我的问题是 6 返回为 False,但是当作为列表的一部分进行测试时,它返回为 true?

>>> all([6, 7, 8, 9])
True
>>> 6 == True
False

这是我不明白的一点?

【问题讨论】:

  • bool(6)
  • True 和 False 的序数值分别为 0 和 1 IIRC。因此,这种行为。如果您想解释为 bool,请使用,例如bool(6)
  • 在我看来这个关闭太仓促了。检查我:你真正要问的是,67 似乎是 False,那么为什么第二个表达式是 True。如果是这样,答案是非零整数在布尔上下文中计算为True;但是当您测试6 == True 时,整数不会被强制转换为布尔类型,因此您实际上是在测试6 == 1,即False
  • 啊!谢谢汤姆!我现在知道了。抱歉,我对这种真实行为一无所知,现在您已经解释说,我实际上因为一开始没有注意到自己而感到愚蠢。有什么方法可以为您提供正确答案的信用,即使它是评论?
  • @Matthew 现在它已经重新打开了,是的 :)

标签: python python-3.x boolean short-circuiting


【解决方案1】:

检查我:你真正要问的是,67 似乎是 False,那么为什么第二个表达式是 True。如果是这样,答案是非零整数在布尔上下文中计算为True;但是当您测试6 == True 时,整数并没有被强制转换为布尔类型,因此您实际上是在测试6 == 1,即False

编辑:在布尔上下文中测试某事物是否为 True 的正确方法是,例如:

bool(6)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多