Python 一行不同运算符的 if-else

Python one line if-else with different operators

我在 python 和 运行 中摆弄一行 if 和 for 语句来解决以下问题:

我可以做类似下面的工作:

state = 1 if state == 4 else 2

但我想在同一上下文中使用 = 和 +=,如下所示:

state = 1 if state == 4 else state+=1

如何在一行中实现这一点?

+= 不是运算符,它是一个 语句 。不能在表达式中使用语句。

因为state是一个整数,就用+,其中一个运算符:

state = 1 if state == 4 else state + 1

最终结果与使用 += 就地添加完全相同。

更好的是,使用 % 模数运算符:

state = (state % 4) + 1

首先达到了你想要达到的目的;将 state 限制为 14 之间的值。

这是不可能的,因为 Python 中有 assignment is not an expression

只有表达式在 Python 中有值,这与例如 JavaScript 不同——几乎任何东西,包括赋值,都有值。

你可以这样写你的程序,但是:

state = 1 if state == 4 else state + 1

这使得值以状态为条件,而不是赋值。它适用于您的情况,因为状态变量总是被分配一个新值。

在一般情况下,假设您想根据当前状态更新不同的变量,您应该坚持使用常规 if 语句。不要过度使用三元运算符 (x if C else y) - 只有在它使您的代码更具可读性时才使用它。

您已经将结果分配给 state,因此您可以:

state = 1 if state == 4 else state + 1

另一种方法是: var = 测试和 "when true" 或 "when false"

state = state == 4 and 1 or state + 1

模数答案对此更好,但以上是有用的快捷方式

使用 lambda:

state = (lambda n:[n+1,0][n==4] )(state)

所以,本质上:

[n+1,0][1] # True(1): 表示获取索引#1,即 0
[n+1,0][0] # False(0):表示得到index#0,也就是n+1

为了使其更具可读性,我将其分解为一个函数:

def myfunc(n):
    ans = [ n+1, 0 ]
    if n==4:
        return ans[1] # which is the value 0
    else:
        return ans[0] # which is n+1

state=6
state=myfunc(state) # returns 7
state=4
state=myfunc(state) # returns 0