python赋值在条件运算的其他部分失败

时间:2018-02-16 10:21:45

标签: python

为什么在其他部分失败?我试图根据一行以下的条件增加两个变量。

>>> a=0
>>> b=0
>>> a+=1 if True else b
>>> a
>>> 1
>>> a if True else b+=1
  File "<input>", line 1
SyntaxError: can't assign to conditional expression
>>> a if False else b+=1
  File "<input>", line 1
SyntaxError: can't assign to conditional expression
>>> a+=1 if False else b
>>> a
>>> 1
>>> a+=1 if True else b+=1
  File "<input>", line 1
    a+=1 if True else b+=1
                        ^
SyntaxError: invalid syntax

4 个答案:

答案 0 :(得分:3)

a+=1 if True else b被解析为

a += (1 if True else b)

在Python中,赋值是不是表达式。

答案 1 :(得分:1)

在python中,在一行中,赋值运算符的右侧不能再使用赋值。

例如a = b + (c = d),无法在python中完成。

再次参考上述例子:

有效操作

b = 10
a = 20

a+=1 if True else b  # this is valid.
a+=1 if False else b  # this is valid.

无效操作

a if True else b+=1  # this is invalid.
a if False else b+=1  # this is invalid.
a+=1 if True else b+=1  # this is invalid.
t = a if True else b=1  # this is invalid.

在这些陈述中,如果我们尝试打印 a if True else b会打印b值。 但是在上面的代码中,尝试在表达式中使用赋值,它将不允许在python中使用。

这种语法在C语言中是允许的,但在python中不允许。 例如,在C语言中,我们可以像

一样编写
if (a=10): printf("%d", a); 

实际上会将条件内的赋值传递给a并传递条件并执行if part。

在python中,如果你将代码编写为:

,它只会抛出一个错误
if a=10: print a

只能像在

中一样编写python
if a==10 : print a

答案 2 :(得分:0)

你想要的是

if True: a+=1
else: b+=1

答案 3 :(得分:-1)

原因是python中语法x if cond else y的含义。此语法的含义不是operation_a if condition else operation_b,而是value_a if condition else value_b

这意味着使用它的正确方法是

var = val1 if condition else val2

而不是:

var1=val1 if condition else var2=val2

阅读详情:details about if else oneliner operator

P.S:使用类似的黑客:

(var1=val1)  if condition else (var2=val2) 

可能会工作,但不要使用它,因为它不是pythonic,并且这个语句的返回值乍一看并不明显(“显式更好然后隐式”)