我最近发现了标准构造“ expression_on_true if predicate else expression_on_false ” 的替代方法,我在目录中没有看到它:(expression_on_false, expression_on_true)[predicate]

怎么运行的
- 在括号中,声明了两个元素的元组。
- 在方括号中,将计算谓词值。
- 通过索引1(如果谓词的值为True)或0(如果谓词的值为False)访问元组。
让我们看一个例子
假设有一个,如果数字不小于零,则需要打印“正”;如果数字小于零,则需要打印“负”。
>>> a = 101
>>> ("negative", "positive")[a >= 0]
'positive'
>>> a = -42
>>> ("negative", "positive")[a >= 0]
'negative'
>>> a = 0
>>> ("negative", "positive")[a >= 0]
'positive'
在第一种情况下,101> = 0,因此谓词返回True。索引时,True变为1,因此调用转到索引为1的元素。在第二种情况下,相同的事情:谓词为False,调用转到索引为0的元素。构造(“负”,“正”)[a> = 0]至少并且如果a> = 0则不比“ positive”短很多,否则为“ positive”,但我仍然发现此功能很有趣注意
(感谢Dasdy)如果我们将表达式替换为元组而不是常量,则只应执行其中的一个,则此构造将失去其含义。