为什么这个表达式“1 == 1和0或0.1”的值在python中等于0.1?

时间:2017-09-26 02:26:37

标签: python

为什么这个表达式“1 == 1和0或0.1”的值在python中等于0.1? enter image description here

4 个答案:

答案 0 :(得分:2)

情况就是这样:

1 == 1 => True
True and 0 => 0
0 or 0.1 => 0.1

您可以打开REPL进行模拟。

我认为令你困惑的是你可能认为or /和操作必须返回布尔值。

但是,并非如此,他们会将实际价值返回参与比较。

答案 1 :(得分:1)

什么是andor

a and b是一种写作a if not a else b的奇特方式。也就是说,如果a是假的,那就归还它,因为假的,任何东西都是假的。否则,请返回b

a or b是一种写作a if a else b的奇特方式。也就是说,如果a是真实的,那就归还它,因为真实或任何事情都是真实的。否则,请返回b

因此,andor不一定返回布尔值。

1 == 1 and 0 or 0.1(1 == 1 and 0) or 0.1,因为and的优先级高于or; 1 == 1 and 01 == 1 if not 1 == 1 else 0;清楚1 == 1,结果是0。最后一个表达式是0 or 0.1 0 if 0 else 0.1,而0显然是假的,所以我们得到0.1

请注意,and为falsy留下了短路(允许您执行x < len(l) and l[x] == kor短路的事情。

答案 2 :(得分:0)

1==1表示正确。 bool and a or b与C中的bool?a:b相似。

但现在这是一个特殊情况a = 0,在这种情况下,b将会返回。

此表达式bool?a:b将失败。它将执行以下操作:

1==1为真,a为false.So 1==1 and a为false

然后,false or b是b。

答案 3 :(得分:0)

如果你曾经学过学校的操作顺序,你就知道在乘法/除法之前会对指数进行评估。

从同样的意义上说,Python有一个order of operations,其中运算符andor的优先级非常低。重要的是,or的优先级低于==,等式比较1 == 1 and 0 or 0.1 的优先级高于两者。

>>> 1 == 1        # equality comparison evaluates to True
True
>>> True and 0    # boolean AND evaluates to 0
0
>>> 0 or 0.1      # boolean OR evaluates to 0.1
0.1

以上将按以下顺序进行评估:

SELECT person.Id, person.firstName, person.lastName, person.birthdate, gender.gender, family.id, Relationship.description
FROM person
INNER JOIN gender on person.gender = gender.Id
INNER JOIN family on person.idFamily = family.Id
INNER JOIN Relationship on person.capRelationship = Relationship.id
INNER JOIN household on family.idHousehold = household.id;