2011-03-14 19 views

答えて

9

ローカル変数は、よく、関数のスコープにローカルです。関数が現在実行されていないときにも存在しないため、アクセスするものはありません。

あなたは、変数が大きくスコープを持つようにしたい場合は、よく、ちょうどそれを大きな範囲与える:

def blue(self): 
    self.var = "This is blue" 

def red(self): 
    print self.var 
2

を1つのメソッドのみがデフォルトとされ、最も簡単な場合に(一度に実行されますほとんどの言語で最も一般的です)、ローカル変数は関数の実行中にのみ存在するため、関数が呼び出されたときに作成され、関数が返されたときに破棄されるため、redの実行中にローカル変数は存在しません。

同時実行性を追加すると、redblueが同時に実行される可能性があります(通常は気づかないと思いますが)。しかしvarはまだローカルの変数がblueなので、その値を取得するためにいくつかの地獄があったとしても、そうすることはまったく狂気になり、良い練習に対して犯罪になります。グローバルを介してスレッド間で状態を共有することは、落とし穴で十分です。ローカルにも混在する必要はありません。

あなたは何ですか本当にをしようとしていますか?インスタンス変数(self.var = ...)またはreturnのいずれかをblueにすることをお勧めします。

+0

私は既存の変数を使用することを考えていたので、コーディング時間を節約できました。私はこれの周りに自分の道を働くことができますが、私は私が投稿した最初のコードで何をしようとすることが可能であればほしい。 – user652124

1

関数/メソッドのローカル変数は、その関数/メソッドの外部ではアクセスできません。メソッド間で状態を共有するには、インスタンス変数を使用します。

1)あなたは、bはself.blueに割り当てる、青への関数ポインタです:

class Colors(): 

    def blue(self): 
     self.var = "This is blue" 

    def red(self): 
     print self.var 
1

あなたが予期しないものがここで起こってのカップルを持っています。

2)あなたはスコープの問題を持って、あなたは以下の

def blue(self): 
    self.var = "This is blue" 

def red(self): 
    print self.var 

をしたいそれとも、あなたが戻っている青い何か印刷する場合:

def blue(self): 
    return "This is blue" 

def red(self): 
    print blue() 
0

みんなありがとうを。私はその周りに道を開いた。 2番目のメソッドで同じ値の別のローカル変数を作成しました。

+0

回答を受け入れることを検討してください。最も助けられました(回答によって緑色のチェックマークをクリックしてください)。これは、あなたが選んだ解決策であることを皆に示します。 –

関連する問題