为什么分配失败了?我试图根据一行以下的条件来增加两个变量。
>>> 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,并且该语句的返回值乍一看并不明显("显式比隐式更好"(