我正在摆弄一行if if和for python中的语句并遇到以下问题:
我可以做类似以下的工作:
state = 1 if state == 4 else 2
但我想在相同的上下文中使用=和+ =,如下所示:
state = 1 if state == 4 else state+=1
如何在一行中实现这一点?
答案 0 :(得分:5)
+=
不是运算符,而是语句。您不能在表达式中使用语句。
由于state
是一个整数,只需使用+
,其中 是一个运算符:
state = 1 if state == 4 else state + 1
最终结果与使用+=
就地添加完全相同。
更好的是,使用%
模数运算符:
state = (state % 4) + 1
首先实现了你想要达到的目标;将state
限制为1
和4
之间的值。
答案 1 :(得分:1)
这是不可能的,因为assignment不是Python中的expression。
只有表达式在Python中具有值,例如与JavaScript不同 - 几乎任何东西,包括赋值,都有值。
你可以这样写你的程序,但是:
state = 1 if state == 4 else state + 1
这使得值以状态为条件,而不是赋值。它适用于您的情况,因为状态变量总是被赋予一个新值。
在一般情况下,假设您要根据当前状态更新不同的变量,您应该坚持使用常规if
语句。不要过度使用三元运算符(x if C else y
) - 只有在它使代码更具可读性时才使用它。
答案 2 :(得分:0)
您已将结果分配给state
,因此您可以:
state = 1 if state == 4 else state + 1
答案 3 :(得分:0)
另一种方法是: var = test和“when true”或“when false”
state = state == 4 and 1 or state + 1
模数答案对此更好,但上面是有用的快捷方式
答案 4 :(得分:0)
使用lambda:
state = (lambda n:[n+1,0][n==4] )(state)
所以,实质上:
[n+1,0][1]
#True(1):表示索引#1,即0
[n+1,0][0]
#False(0):表示获取索引#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