2016-07-24 11 views
-2

Ich habe kürzlich mit der Programmierung begonnen. Alles funktioniert gut, aber dieses Stück Code fasziniert mich seit langer Zeit.Warum ändert sich die globale Variable auch nach der globalen Festlegung nicht?

Hier ist mein Code.

addon = 20 
startup = 50 + addon 

def click(): 
    global addon, startup 
    addon *= 2 
    print addon, startup 

click() 
click() 
click() 
click() 
click() 
click() 
click() 
click() 
click() 
click() 

Das ist mein Ausgang: -

40 70 
80 70 
160 70 
320 70 
640 70 
1280 70 
2560 70 
5120 70 
10240 70 
20480 70 

Dies ist, was ich erwartet hatte: -

40 90 
80 170 
160 330 
320 650 
640 1290 
1280 2570 
2560 5130 
5120 10250 
10240 20490 
20480 40970 

Ich bin einfach nicht bekommen. wenn jeder Aufruf von click die globale Variable addon aktualisiert, sollte sie auch startup Variable aktualisieren. Aber weiß nicht, warum es nicht funktioniert.

+0

@Sanatan: Wie 'aktualisiert startup' werden sollte? Sollte es auch mit "2" multipliziert werden? – kamwo

+0

eigentlich war es 'Startup = 50 + Addon' nicht' Startup = 50'. Bitte helfen Sie. –

+0

Wo ist der Code, der den Start ändert. Sie stellen es auf 70 ein und ändern es nie. –

Antwort

1

startup nicht speichert einen Ausdruck, speichert sie die Ergebnis eines Ausdrucks, einmal.

Mit anderen Worten verweist die Variable startup das Ergebnis von 50 + addon, die zu der Zeit 70 die ganze Zahl ist.

Das addon spätere Änderungen macht hier keinen Unterschied, weil startup nicht addon verweist.

würden Sie haben startup eine Funktion stattdessen zu machen, und rufen jedes Mal, wenn Funktion, wenn Sie den Ausdruck neu berechnen wollen:

startup = lambda: 50 + addon 

Ich benutzen ein lambda expression die Funktion hier zu schaffen; a lambda erstellt eine Funktion aus einem einzelnen Ausdruck.

Sie dann rufen startup jedes Mal, wenn Sie das letzte Ergebnis sehen müssen:

def click(): 
    global addon 
    addon *= 2 
    print addon, startup() 
+0

danke, ich verbrachte viel Zeit im Internet zu suchen, aber bekam nie die Antwort. Danke vielmals. –

Verwandte Themen