【问题标题】:Python bool statements [duplicate]Python bool 语句 [重复]
【发布时间】:2016-09-28 22:17:45
【问题描述】:

为什么在第 3 种情况下它会返回 77?这不是一个布尔语句吗?请注意,案例 1 和 2 返回 False。情况2和3有什么区别?

7 >= 77 and 77 
Out[313]: False

7 >= 77 and 7
Out[314]: False

7 >= 7 and 77
Out[315]: 77

7 >= 8 and 77
Out[318]: False

谢谢

关于@Kasramvd 的评论,即我的问题与其他用户的问题完全相同(见下文)

对于我这个新手来说,我的问题与下面的问题完全一样,这一点并不明显。专家可以很容易地看到相同的答案适用于两者。阅读答案后,我确实看到了一个链接。在得到答案之前,我不可能知道。

我是编程新手。这是我第一次加入 stack over flow。这是我关于stackoverflow的第一个问题。看来stackoverflow对新手不友好。感谢您阻止我提出更多问题。我也发现了这一点。


另一个用户的问题

我试图从别人的项目中理解这段代码。如果你想要上下文,它在这里:https://github.com/newsapps/beeswithmachineguns/blob/master/beeswithmachineguns/bees.py#L501

IS_PY2 只是一个布尔变量,如果 Python 主要版本为 2,则为 True。我知道非空字符串为 True,但由于某种原因,我不明白 openmode 被分配了“w”或“wt”而不是对或错。

openmode = IS_PY2 and 'w' or 'wt'
openkwargs = IS_PY2 and {} or {'encoding': 'utf-8', 'newline': ''}

【问题讨论】:

  • 查看原始问题的编辑以澄清@Kasramvd
  • @HuyNguyen 没有人会阻止您提出更多问题。这是这个社区趋于管理的最佳方式。每个新人在开始之前都应该阅读documentation first
  • @Kasramvd,不同的问题具有相同的根本原因。与上面的问题一样,我的问题是关于带有比较符号(>、

标签: python boolean


【解决方案1】:

这与and 短路并返回真值而不是TrueFalse 的事实有关。

在:

7 >= 77 and 7

7 >= 77 等于False,所以and 的第二个操作数永远不会被计算,所以它变成False

在:

7 >= 7 and 77

7 等于 7(显然),因此计算 and 的第二个操作数。由于 77 是真实的,所以它是返回的。

【讨论】:

    【解决方案2】:

    我相信 python 中的机制和语句是这样工作的。

    and 语句中的条件是按顺序计算的。如果发现了一个虚假的东西,那么它会按原样返回。否则,返回 and 条件中的最后一项。

    在 Python 中,事物具有真假的概念,但不一定是布尔变量。因此, and 只返回第一个错误的事物或最后一个条件。在这种情况下,它正在重新调整 77,如果你把它放在条件中,它将被视为 True,因为 77 是真实的。

    例如,如果你这样做了

    7>=7 and False and 77 # ===> False
    7>=7 and 0 and 77 # ===> 0
    7>=7 and [] and 77 # ===> []
    

    所以你看到它不一定返回 True/False,它只是返回它看到的第一个虚假的东西或返回最后一个东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 2013-04-05
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2019-08-24
      相关资源
      最近更新 更多