Python一行条件



谁能解释一下这个代码是干什么用的?

shift, range = order < self.order and (1, (to, orig-1)) or (-1, (orig+1, to))

我知道它将根据order < self.order

的结果设置移位和范围

我不知道的是为什么这里有一个andor语句

来自Python布尔表达式的文档-

表达式x and y首先求值x;如果x为false,则返回其值;否则,计算y并返回结果值。

表达式x or y首先求值x;如果x为true,则返回其值;否则,计算y并返回结果值。

所以Python中的and/or表达式不一定返回TrueFalse,而是-

  1. 对于and,它返回最后一次计算的False值,或者如果所有值都是True,它们返回最后一次计算的值。

  2. 对于or,它返回最后一次计算的True值,或者如果所有值都是False,它返回最后一次计算的值。

如果条件为真,则返回(1, (to, orig-1))的值,否则返回(-1, (orig+1, to))的值。

非常简单的例子-

>>> 1 < 5 and 2 or 4
2
>>> 6 < 5 and 2 or 4
4

同样,虽然不直接适用于条件,但在一般情况下,适用于-

cond and a or b

如果cond是一个类似true的值,而a是一个类似false的值(如0或空字符串/列表/元组等),它将返回b。例子——

>>> 1 < 5 and 0 or 2
2
因此,最好使用等效的if..else三元表达式,示例-
a if cond else b

这段代码中有一个逻辑错误-当order < self.order求值为True时,将引发异常。

我相信这就是我想要的:

shift, range = (1, (to, orig - 1)) if order < self.order else (-1, (orig + 1, to))

order < self.order为True时,将1赋值为shift, (to, orig - 1)赋值为range;当order >= self.order

时,将-1赋值为shift, (orig + 1, to)赋值为range。

最新更新