2016-03-24 16 views
1

2日前に問題が発生しましたが、それを動作させる方法が見つからず、シンプルで解決策がわかりました。関数中にPython変数が変更されていません

leftKeyCounter = 0 

def sendCommand(): 
    # I want to get the counter back to 0. 
    leftKeyCounter = 0 
    return leftKeyCounter 

while True: 
... 
leftKeyCounter = leftKeyCounter + 1 

sendCommand()関数は、「スケジュール」ヘルパーで5秒ごとに自動的に呼び出されます。 は、ここで私が得たものです。 私の端末では、 "leftKeyCounter"は変更されません。それが4であれば、関数が実行されると変数は0になりますが、1をもう一度加えると5となります。

私が探しているすべてのソリューションは、 「あなたは、廃止されましたので、私は実用的なソリューションを見つけることができません...任意の助け:)

+0

あなただけの 'sendCommand()'関数でグローバルleftKeyCounter' '追加する必要があります。

もう一つの方法は、中に変数を渡すと、変更された値を返し、その後、この戻り値を保存することです。 –

答えて

2

ため

おかげであなたはグローバルスコープ変数を参照したい場合は、とにそれらを修正すること次のことを行うことができます:

leftKeyCounter = 0 

def sendCommand(): 
    # I want to get the counter back to 0. 
    global leftKeyCounter 
    leftKeyCounter = 0 
    return leftKeyCounter 

while True: 
... 
leftKeyCounter = leftKeyCounter + 1 

Th質問はすでに回答済みです:Using global variables in a function other than the one that created them

+0

今すぐ試してみると、あなたが参照しているこの記事にはすでに出てきましたが、私はそれが非難されたと思っています。私はとても多くの場所でそれを読んだので、グローバルな方法で...(投稿は2009年ですから...)、ありがとう – ThaoD5

2

これはスコープ上の問題です。

sendCommand - > leftKeyCounterはleftKeyCounterと同じではありません。関数のスコープ内にあるため、0と表示されます。

このスタックオーバーフローの質問には、これがどのように機能するかについての優れた回答と情報があります。 Short Description of the Scoping Rules?

+0

ありがとう!見てみましょう:) – ThaoD5

4

あなたのメソッド内のleftKeyCounterが、同じ名前を持っていても外側に定義されたlefKeyCounterとは異なるためです。この方法は、外に定義されleftKeyCounterを変更するようにする

一つの方法は、globalキーワードを使用することです - ので、それは変数のグローバルバージョンを修正していることを知っています。

def sendCommand(leftKeyCounter): 
    # do something here 
    if something_is_true: 
     leftKeyCounter = 0 
    return leftKeyCounter # this is the new value of leftKeyCounter 

leftKeyCounter = 0 # this is the starting value 
while True: 
    # do something here 
    leftKeyCounter = sendCommand(leftKeyCounter) 
+0

ありがとう、多くの固定! – ThaoD5

関連する問題