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
限制为 1
和 4
之间的值。
这是不可能的,因为 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
我在 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
限制为 1
和 4
之间的值。
这是不可能的,因为 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