Python三元运算符的另一种形式

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

(expression_on_false, expression_on_true)[predicate]

图片

怎么运行的


  1. 在括号中,声明了两个元素的元组。
  2. 在方括号中,将计算谓词值。
  3. 通过索引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
如果我们将表达式替换为元组而不是常量,则只应执行其中的一个,则此构造将失去其含义。

All Articles