python - 条件表达式/三元运算符
问题描述
我不明白这种语法。
演示三元运算符的 Python 程序
a, b = 10, 20
使用元组选择项目
print( (b, a) [a < b] )
使用字典选择项目
print({True: a, False: b} [a < b])
PS:我猜这是来自旧版本的 Python,因为在较新的版本中(不知道来自哪个版本) True 和 False 是保留关键字,所以它们不能被赋值。
lamda 比上述两种方法更有效,因为在 lambda 中,我们确保只有一个表达式将被评估,这与 tuple 和 Dictionary 不同
print((lambda: b, lambda: a)[a < b]())
语法应该是:
[on_true] 如果 [表达式] 否则 [on_false]
那么如何
print( (b, a) [a < b] )
print({True: a, False: b} [a < b])
print((lambda: b, lambda: a)[a < b]())
适合这种语法?[a<b]
元组/字典/lambda之后的含义是什么?我以前从未见过这种语法。它也适用于 list[b, a]
先于[a<b]
。
我希望它看起来像这样
print( a if a < b else b )
资源链接: https ://www.geeksforgeeks.org/ternary-operator-in-python/
解决方案
您的误解可能是关于 a < b 。
在所有这些情况下,评估 a < b 的布尔结果被用作之前对象的键。
如果是
print( (b, a) [a < b] )
和
print((lambda: b, lambda: a)[a < b]())
该对象是一个元组,包含变量本身或非常简单的匿名函数,它们返回这些变量。
如果是
print({True: a, False: b} [a < b])
该表达式被评估并用作字典的键,该字典具有 True 和 False 作为键。假设这意味着它必须是较旧的 Python 版本是不正确的,因为字典不代表值的重新分配,而只是一个数据结构,其中键映射到值。True 和 False 是有效的键,这种情况正是这里使用的。
最后:
print( a if a < b else b )
是表达同一件事的一种简洁明了的方式,实际上是我在这种情况下使用的代码行