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

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

a += (1 if True else b)

在Python中,分配是不是表达式。

在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并传递条件并执行如果部分。

在Python中,如果您写代码为:

if a=10: print a

一个人只能在python中写下

if a==10 : print a

您想要的是

if True: a+=1
else: b+=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

阅读更多信息:有关其他Oneliner Operator

的详细信息

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

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

可能会起作用,但不要使用它,因为它不是Pythonic,并且该语句的返回值乍一看并不明显("显式比隐式更好"(

相关内容

最新更新