2016-01-09 18 views
7

Ist es möglich, einen Wert zuzuweisen und den zugewiesenen Wert in derselben Zeile in Python zu erhöhen?Wert in einer Zeile zuweisen und inkrementieren

Etwas wie folgt aus:

x = 1 
a = x 
b = (x += 1) 
c = (x += 1) 

print a 
print b 
print c 

>>> 1 
>>> 2 
>>> 3 

Edit: Ich brauche es in einem Kontext, in dem ich eine Excel-Tabelle bin erstellen:

col = row = 1 
ws.cell(row=row, column=col).value = "A cell value" 
ws.cell(row=row, column=(col += 1)).value = "Another cell value" 
ws.cell(row=row, column=(col += 1)).value = "Another cell value" 

Edit 2: Lösung: Es ist nicht möglich, aber ich habe eine einfache Lösung erstellt:

col = row = 1 

def increment_one(): 
    global col 
    col += 1 
    return col 

ws.cell(row=row, column=col).value = "A cell value" 
ws.cell(row=row, column=increment_one()).value = "Another cell value" 
ws.cell(row=row, column=increment_one()).value = "Another cell value" 

Antwort

7

Nein, das ist in Python nicht möglich.

Assignments (oder augmented assignments) sind Aussagen und dürfen daher nicht auf der rechten Seite einer anderen Aufgabe erscheinen. Sie können nur Ausdrücke Variablen zuweisen.

Der Grund dafür ist höchstwahrscheinlich die Vermeidung von Verwechslungen durch Nebenwirkungen, die leicht in anderen Sprachen verursacht werden, die dies unterstützen.

Normale Zuweisungen unterstützen jedoch mehrere Ziele, sodass Sie mehreren Variablen denselben Ausdruck zuweisen können. Dies erlaubt natürlich immer noch nur einen einzigen Ausdruck auf der rechten Seite (noch keine Aussage). In Ihrem Fall, da Sie b und x wollen mit dem gleichen Wert am Ende, könnte man es so schreiben:

b = x = x + 1 
c = x = x + 1 

Beachten Sie, dass da sind Sie x = x + 1 tun Sie sind nicht mehr eine erweiterte Zuordnung verwenden und als Dies könnte für einige Typen unterschiedliche Auswirkungen haben (nicht für ganze Zahlen).

3

Sie können es mit einer Funktion tun, hier verwende ich die Lambda-Funktion. Es gibt kein exaktes Python-Äquivalent von ++x oder x++ in c.

+1

Nicht sicher, warum Sie dort eine Funktion wünschen. Der Code ist äquivalent zu 'b, x = x + 1, x + 1' – poke

+0

@poke Wahr in der Tat. Ich schrieb das erste, worüber ich nachdachte. Nun kann die Funktion bei Bedarf für eine andere komplexe Operation verwendet werden. – wolfsgang

4

Nicht eine schöne, aber Sie können so etwas tun.

x = 1 
a = x 
x = b = x+1 
x = c = x+1 

>>> print a,b,c 
>>> 1,2,3 

>>>print id(a),id(b),id(c),id(x) 
>>>31098952 31098928 31098904 31098904 
Verwandte Themen