为什么b =(a + = 1)是python中无效的语法?

时间:2013-12-06 12:11:46

标签: python python-2.7

如果我在python中编写以下内容,我会收到语法错误,为什么会这样?

a = 1
b = (a+=1)

我正在使用python版本2.7

运行时我得到的结果如下:

>>> a = 1
>>> b = (a +=1)
  File "<stdin>", line 1
    b = (a +=1)
        ^
SyntaxError: invalid syntax
>>>

4 个答案:

答案 0 :(得分:7)

与其他一些语言不同,Python中的赋值(包括增强赋值,如+=)是而不是一个表达式。这也会影响到这样的事情:

(a=1) > 2

在C和其他几种语言中是合法的。

通常给出这个的原因是因为它有助于防止这类错误:

if a = 1: # instead of ==
    pass
else:
    pass

因为赋值不是表达式,所以这是Python中的SyntaxError。在等效的C代码中,它是一个微妙的错误,变量将被修改而不是检查,检查将始终为真(在C中,就像在Python中一样,非零整数总是真的,并且else块永远不会触发。

可以仍然在Python中进行链式赋值,所以这可行:

>>> a = 1 
>>> a = b = a+1
>>> a
2
>>> b
2

答案 1 :(得分:4)

a +=1是Python中的语句,您无法为变量分配语句。虽然它在C,PHP等语言中是有效的语法,但不是Python。

b = (a+=1)

等效版本将是:

>>> a = 1
>>> a += 1
>>> b = a

答案 2 :(得分:2)

正如@Ashwini所说,a+=1是一项任务,而不是一项价值。您无法将其分配给b或任何变量。你可能想要的是:

b = a+1

答案 3 :(得分:1)

这里提供的所有答案都很好,我只想补充一点,你可以在单行表达式中实现你想要的东西,但是以不同的方式写出来:

b, a = a+1, a+1

在这里你做差不多同样的事情:将a递增1,并将a+1的值分配给b - 我告诉'差不多',因为这里我们有两个总结而不是一个。