2016-07-24 7 views
-2

最近プログラミングを開始しました。すべてがうまくいっていますが、このコードは長い間興味をそそられています。グローバル変数を指定しても関数がグローバル変数を変更しない理由

ここに私のコードです。

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() 

これは私の出力である: -

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

これは私が期待したものである: -

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

私は得ていないのです。 clickのすべての呼び出しがグローバル変数addonを更新している場合は、それもまたstartup変数を更新する必要があります。しかし、なぜそれが動作していないのか分からない。

+0

@Sanatan: '更新する必要があるstartup'どのように?それに '2 'を掛けるべきでしょうか? – kamwo

+0

実際には 'startup = 50 + addon'ではなく' startup = 50'でした。助けてください。 –

+0

スタートアップを変更するコードはどこにありますか?あなたは70に設定し、決してそれを変更しません。 –

答えて

1

startup表現が格納されていない、それは表現の結果を格納し、一度。すなわち

、変数startupは一度整数70ある結果50 + addonを参照。

addonstartupは参照していないため、後で変更しても差はありません。

あなたが再計算表現したい場合は、それぞれの時間を代わりにstartup機能を行う必要があり、その関数を呼び出したい:

startup = lambda: 50 + addon 

私はここに関数を作成するlambda expressionを使用。 lambdaは、1つの式から関数を作成します。

あなたは、あなたが最新の結果を参照する必要がstartupたびに呼び出す:

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

おはよう、私はインターネット上で多くの時間を費やしていたが、決して答えは得られなかった。どうもありがとう。 –

関連する問題