Python中x<y<=z的含义有些混淆。

5

我是Python的新手。我有三个变量xyz,它们都是int类型。我在if条件语句中比较了这三个变量。我对下面代码的结果感到困惑。

表达式x < y <= z的值为false。

假设x = 10y = 5z = 0。如果x < y的结果是False,那么False <= 0的结果应该是True。但输出结果却是False。为什么呢?

我的Python脚本:

#!/usr/bin/python

x = 10
y = 5
z = 0

if (x < y < z):
        print"True"
else:
        print"False"

1
x < y <= zx < y and y <= z相同,这些运算符是链接的。 - Martijn Pieters
与其他语言不同的行为。 - trincot
@trincot:Rust 和 Coffeescript 支持相同的概念。 - Martijn Pieters
1
是的,我的意思是OP可能将逻辑应用到了其他他熟悉的编程语言中正确的那种方式。 - trincot
2个回答

5

这个文档说明:

比较操作可以任意链式组合;例如,x < y <= z等价于x < y and y <= z,除了在y只计算一次(但在x < y为false时不会计算z)。

x < y <= z既不表示(x < y) <= z也不表示x < (y <= z)x < y <= z等价于x < y and y <= z,并且从左到右依次计算。

逻辑与在Python中没有像C和C++那样的结合性。这种运算符序列有单独的规则,不能被表达为结合性。

x < y and y <= z只有在第一个参数为true时才计算第二个参数,因为and是一个短路运算符。


2
该表达式的求值结果为:
if (x < y and y < z):
    pass

所以你现在明白为什么是假的,因为 x 不小于 y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接