【问题标题】:Why '[False] or [True]' evaluates to [False] in python3?为什么'[False] 或 [True]' 在 python3 中计算为 [False]?
【发布时间】:2019-09-26 14:38:58
【问题描述】:

为什么 '[False] 或 [True]' 在 python3 中计算为 [False]?这是我尝试过的。

[True] or [False] evaluates to [True]
[False] or [True] evaluates to [False]
[False] or True   evaluates to [False]
False or [True]   evaluates to [True]
False or True     evaluates to True

为什么 or 运算符不可交换?

【问题讨论】:

  • 为什么or 对于非布尔参数是可交换的? 3 or 43,但 4 or 34。您如何将其更改为可交换的?
  • 没关系。我希望 python 将 3 和 4 评估为 True 并返回 True。原来 or operator 不是那样的。

标签: python-3.x


【解决方案1】:

1) 像 [True][False] 这样的非空序列被视为 true-ish。序列中的内容无关紧要,只有为空才会是假的。

2) 表达式x or y 首先计算x;如果x 为真,则返回其值;否则,y 被评估并返回结果值。

现在将这些发现应用到您的表达式中:

[True] or [False] evaluates to True, return first, [True]
[False] or [True] evaluates to True, return first, [False]
[False] or True   evaluates to True, return first, [False]
False or [True]   evaluates to True, return second, [True]
False or True     evaluates to True, return second, True

【讨论】:

  • 感谢您的回答!我不知道这是一个错误还是一个特性,但这条规则只是让 or 运算符变得如此违反直觉,以至于它现在是不可交换的。
  • 另外,我发现 '' 或 [] 的计算结果为 [],而 [] 或 '' 的计算结果为 ''。这似乎不符合你的描述。你知道为什么会发生这种情况吗?
  • 我的解释有点简单。完整的方法是这样的:表达式 x 或 y 首先计算 x;如果 x 为真,则返回其值;否则,计算 y 并返回结果值。
  • 您可以在此处阅读有关该行为的信息:docs.python.org/3/reference/expressions.html#or
猜你喜欢
  • 2015-09-30
  • 2015-03-22
  • 1970-01-01
  • 2015-10-03
  • 2015-03-15
  • 2022-01-10
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
相关资源
最近更新 更多