【发布时间】:2019-02-10 16:30:31
【问题描述】:
我不懂这个语法。
演示三元运算符的Python程序
a, b = 10, 20
使用元组选择项目
print( (b, a) [a < b] )
使用字典选择项目
print({True: a, False: b} [a < b])
PS:我猜这是来自旧版本的 Python,因为在较新的版本中(不知道来自哪个版本)True 和 False 是保留关键字,所以它们不能被赋值。
lamda 比以上两种方法效率更高 因为在 lambda 中,我们保证只有一个表达式将被评估,这与 元组和字典
print((lambda: b, lambda: a)[a < b]())
语法应该是:
[on_true] if [表达式] else [on_false]
那么如何
print( (b, a) [a < b] )
print({True: a, False: b} [a < b])
print((lambda: b, lambda: a)[a < b]())
适合这种语法吗?
tuple/dictionary/lambda 后面的[a<b] 是什么意思?我以前从未见过这种语法。当列表 [b, a] 位于 [a<b] 之前时,它也有效。
我希望它看起来像这样
print( a if a < b else b )
资源链接: https://www.geeksforgeeks.org/ternary-operator-in-python/
【问题讨论】:
-
True和False没有被赋值;它们只是被用作dict的键。 -
确实如此。我还没有意识到这只是一个键而不是分配。
-
这些是替代语法,而不是
[on_true] if [expression] else [on_false]。他们利用foo = {1: "one"}print( foo[1] )可以直接写成print( {1: "one"}[1] )的事实。 -
关于 lambdas 更高效的评论也值得怀疑。构造两个
function对象并随后调用其中一个对象可能比首先简单地评估a和b更昂贵(无论如何计算a < b,所以整个构造有点低效)。
标签: python ternary-operator conditional-operator