hug*_*hes 22 python syntax comparison
不知何故,这工作:
def in_range(min, test, max):
return min <= test <= max
print in_range(0, 5, 10) # True
print in_range(0, 15, 10) # False
Run Code Online (Sandbox Code Playgroud)
但是,我不能完全弄清楚这里的操作顺序.我们来测试一下这个False案子:
print 0 <= 15 <= 10 # False
print (0 <= 15) <= 10 # True
print 0 <= (15 <= 10) # True
Run Code Online (Sandbox Code Playgroud)
显然,这并不是解决简单的操作顺序问题.区间比较是一个特殊的算子,还是其他的东西?
iCo*_*dez 32
与大多数语言不同,Python支持链式比较运算符,它会对它们进行评估,因为它们将在普通数学中进行评估.
这一行:
return min <= test <= max
Run Code Online (Sandbox Code Playgroud)
由Python评估如下:
return (min <= test) and (test <= max)
Run Code Online (Sandbox Code Playgroud)
然而,大多数其他语言会像这样评估它:
return (min <= test) <= max
Run Code Online (Sandbox Code Playgroud)
比较可以任意链接,例如,
x < y <= z等价于x < y and y <= z,除了y只计算一次(但在这两种情况下z,当x < y发现为假时根本不计算)。形式上,如果a , b , c , ..., y , z是表达式并且op1 , op2 , ..., opN是比较运算符,则
a op1 b op2 c ... y opN z等价于a op1 b and b op2 c and ... y opN z,不同之处在于每个表达式最多计算一次。