【发布时间】:2018-11-07 05:39:49
【问题描述】:
我正在使用 Mark Lutz 的优秀书籍学习 python。我遇到了python中的三元运算符的这种说法,实际上是这样的:
if a:
b
else:
c
可以写成两种方式:
b if a else c: 使用python的普通三元语法和((a and b) or c):使用等效但更复杂的and/or组合
我发现第二种表示令人不安,因为它不符合我的直觉。我在交互式提示符下尝试了这两种语法,并为 b = 0. 的特殊情况找到了不同的答案(假设 b = 0,a = 4,c = 20)
-
0 if 4 else 20输出0 -
((4 and 0) or 20)输出20
这两个表达式似乎与b 的所有truthy 值等效,但对于b 的所有falsy 值并不等效。
我想知道,这里有什么我遗漏的。我的分析错了吗?为什么书中说这两种情况是等价的。请开导我粗糙的头脑。我是 python 新手。提前致谢。
【问题讨论】:
-
不,您似乎做对了。一定是你正在看的书,关于第二种方式什么时候等于第一种方式有点模糊。
-
不,你是对的。你不应该使用它,因为你所说的原因,它是危险的。在三元运算符之前,另一个成语是
[c, b][bool(a)],如果a是布尔表达式,可以省略bool -
@juanpa.arrivillaga 这个成语
[c,b][bool(a)]听起来很酷很创新。对于任何此类特殊情况,它是否也会失败?我希望不会。 -
@Gsbansal10 这并不酷,它是 hackey。使用条件表达式或完整的条件语句。