Python bool语句

时间:2016-09-28 22:17:45

标签: python boolean

为什么在案例3中它会返回77?这不是一个bool声明吗?请注意,案例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': ''}

2 个答案:

答案 0 :(得分:0)

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

在:

7 >= 77 and 7

7> = 77等于False,因此永远不会评估and的第二个操作数,因此它变为False

在:

7 >= 7 and 77

7等于7(显然),因此评估and的第二个操作数。由于77是真实的,它是归还的。

答案 1 :(得分:0)

我相信python中的函数和语句都是这样的。

依次评估和语句中的条件。如果找到了一个虚假的东西,那么它将按原样返回。否则,返回和条件中的最后一件事。

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

例如,如果你这样做

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

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