我可以执行比严格if expressions
更复杂的a = b if c else d
。我可以将串行表达式串起来,或将if expression
嵌套在另一个if expression
中吗?我无法在文档中或在线找到答案。
背景(其中一些只是解释我为什么要这样做,而不是另一种解决方案):
我有两个标量变量(a
和c
),它们具有实际值或设置为-1。如果它们具有值,则始终为真c - a = 2
(它们是列表索引,对于列表中的特定项目,但项目并不总是存在。
如果a
或c
的值不是-1,那么我想创建一个具有特定值的第三个标量变量b
(之间的值) a
和c
)。
a
和c
都没有值,那么我想设置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
这些都是合法的吗?可取?感谢。
答案 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
其价值符合预期:
但由于可读性是Python中的一个主要问题,请不要滥用那些链接的条件表达式......