嵌套/串行if表达式?

时间:2018-05-17 09:01:38

标签: python

我可以执行比严格if expressions更复杂的a = b if c else d。我可以将串行表达式串起来,或将if expression嵌套在另一个if expression中吗?我无法在文档中或在线找到答案。

背景(其中一些只是解释我为什么要这样做,而不是另一种解决方案):

  • 我有两个标量变量(ac),它们具有实际值或设置为-1。如果它们具有值,则始终为真c - a = 2(它们是列表索引,对于列表中的特定项目,但项目并不总是存在。

  • 如果ac的值不是-1,那么我想创建一个具有特定值的第三个标量变量b(之间的值) ac)。

  • 如果ac都没有值,那么我想设置b = -1

理想情况下写这样的东西:

b = a+1 if a != -1 else c-1 if c != -1 else -1

我无法弄清楚这是否允许 - 合法。如果它是合法的,它是否会按顺序进行评估?另一种规范是分层的:

b = (a+1 if a != -1 else c-1) if (c != -1 or a != -1) else -1

这些都是合法的吗?可取?感谢。

2 个答案:

答案 0 :(得分:2)

只是不要....你应该确保你的代码在一行中完全适合你的代码是可读和可维护的。因此,根据需要将其分成多个不同的if语句,或者考虑重构所涉及的逻辑。

最重要的是,当您引入真正的变量名称时,您将无法尝试使其符合pep8标准。

答案 1 :(得分:2)

根据How to parse JSON in Java ?,条件中else之后的部分可以是任何表达式,明确地包括另一个条件表达式。

以下是有效的Python表达式:

a+1 if a != -1 else b-1 if b != -1 else -1

其价值符合预期:

  • a + 1 if a = = 1(b的值无关)
  • b-1如果a == -1且b!= -1
  • -1如果a == -1且b == -1

但由于可读性是Python中的一个主要问题,请不要滥用那些链接的条件表达式......