Wenn ich Folgendes in Python schreibe, wird ein Syntaxfehler angezeigt. Warum?

a = 1
b = (a+=1)

Ich verwende Python Version 2.7

Was ich bekomme, wenn ich es laufen lasse, folgendes:

>>> a = 1
>>> b = (a +=1)
  File "<stdin>", line 1
    b = (a +=1)
        ^
SyntaxError: invalid syntax
>>>
4
Har 6 Dez. 2013 im 16:11

4 Antworten

Beste Antwort

Im Gegensatz zu einigen anderen Sprachen ist die Zuweisung (einschließlich der erweiterten Zuweisung wie +=) in Python kein Ausdruck. Dies betrifft auch folgende Dinge:

(a=1) > 2

Das ist legal in C und mehreren anderen Sprachen.

Der Grund dafür ist im Allgemeinen, dass es hilft, eine Klasse von Fehlern wie diesen zu verhindern:

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

Da die Zuweisung kein Ausdruck ist, ist dies ein SyntaxError in Python. Im äquivalenten C-Code handelt es sich um einen subtilen Fehler, bei dem die Variable geändert anstatt überprüft wird. Die Prüfung ist immer wahr (in C wie in Python a Ganzzahl ungleich Null ist immer wahr), und der else-Block kann niemals ausgelöst werden.

Sie können in Python noch verkettete Aufgaben ausführen, also funktioniert dies:

>>> a = 1 
>>> a = b = a+1
>>> a
2
>>> b
2
7
lvc 6 Dez. 2013 im 12:28

Alle hier gegebenen Antworten sind gut. Ich möchte nur hinzufügen, dass Sie das erreichen können, was Sie wollen, in einem einzeiligen Ausdruck, der jedoch anders geschrieben ist:

b, a = a+1, a+1

Hier machen Sie fast dasselbe: Inkrementieren von a um 1 und Zuweisen des Werts von a+1 zu b - Ich sage 'fast', weil wir hier haben zwei Summierungen statt einer.

1
aga 6 Dez. 2013 im 12:32

Wie @Ashwini sagte, ist a+=1 eine Zuweisung, kein Wert. Sie können es weder b noch einer Variablen zuweisen. Was Sie wahrscheinlich wollen, ist:

b = a+1
2
aIKid 6 Dez. 2013 im 12:21

a +=1 ist eine Anweisung in Python und Sie können einer Variablen keine Anweisung zuweisen. Es ist zwar eine gültige Syntax in Sprachen wie C, PHP usw., aber nicht Python.

b = (a+=1)

Eine äquivalente Version ist:

>>> a = 1
>>> a += 1
>>> b = a
4
Ashwini Chaudhary 6 Dez. 2013 im 12:23