为什么布尔表达式“1 in(1,2,3)== True”为假?

时间:2016-12-10 12:52:02

标签: python boolean-logic operator-precedence

为什么语句1 in (1, 2, 3) == True在Python中返回False? Python中的运算符优先级是不明确的吗?

1 个答案:

答案 0 :(得分:10)

因为,运算符优先级为the documentation

  

请注意,比较,成员资格测试和身份测试都有   相同的优先级,并具有从左到右的链接功能   在Comparisons部分中描述。

“比较”部分显示了链接的示例:

  

比较可以任意链接,例如,x < y <= z是等效的   到x < y and y <= z

所以:

1 in (1, 2, 3) == True

被解释为:

(1 in (1, 2, 3)) and ((1, 2, 3) == True)

如果通过添加括号来覆盖此链接,则会得到预期的行为:

>>> (1 in (1, 2, 3)) == True
True

请注意,您应该只使用例如TrueFalse,而不是将相同性的真实性与if thing:if not thing:进行比较。 function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString; var I: Word; Seed: Word; begin Result := S; Seed := Key; for I := 1 to Length(Result) do begin Result[I] := Char(Byte(Result[I]) xor (Seed shr 8)); //Error is here Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2) end end; 和{{1}}。