2009-08-07 12 views
7
x=True 
def stupid(): 
    x=False 
stupid() 
print x 
+0

OKフォローアップを、どのように私は外側のxを参照することができます? –

+0

うわー、誰かが私に尋ねる前に答えました:) –

+0

'x = True'を' x = [1] 'に置き換え、' x = False'を 'x [0] = 2'に置き換えて、 .. –

答えて

18

Pythonで関数ローカル変数を宣言する必要はありません。 "x = False"は、stupid()のローカルxを参照しています。あなたは本当に愚かな内部グローバルのxを変更したい場合:

def stupid(): 
    global x 
    x=False 
+8

関数内で 'print x'を実行した場合、グローバル' x'を使用することに注意してください。新しいローカル変数を作成するのは*割り当て*だけです。 – quark

2

愚かな機能(中x)は、あなたが本当にXという名前の2つの変数を持っているので、ローカル変数です。

6

xのスコープはstupid()関数のローカルなので、いったん関数を呼び出して終了すると、範囲外になり、stupid()関数の外で定義された "x"の値を出力します。の中に定義されているxは関数stupidのです(その関数が終了すると)()はもうスタック上にあなたのコメントの後に

編集が存在しません:あなたはそれを印刷したときに

Xは、あなたがやったように、参照されています。

xは、関数stupid()内でのみ参照できます。その関数の内部にxを入れることができます。約

それは&作品

  • は、すべてのことが多い
  • 原因の読みやすさとスケーラビリティの問題を使用することを明らかに、
  • ない良いアイデア質問に答える「グローバル」(および潜在的により)
  • プロジェクトによっては、ローカル関数内で定義されたグローバル変数を使用して再考することができます。
2

x = Falseの前に "global x"を追加するとTrueが出力されます。それ以外の場合は、2つの "x"があり、それぞれ異なるスコープにあります。

10

globalを使用し、あなたの次の質問に答えるために:

x=True 
def stupid(): 
    global x 
    x=False 
stupid() 
print x 
+1

ハハ先制的な返事。 – Triptych

3

あなたはPythonでメソッドからグローバル変数xにアクセスしたい場合は、あなたが明示的に実行する必要があります。

x=True 
def stupid(): 
    global x 
    x=False 

stupid() 
print x 
+0

そこに奇妙な出来上がり。 :( – Stobor

2
  • xstupid()に割り当てているため、Pythonはをstupid()に新しく作成します。
  • あなただけstupid()xからを読んでいた場合、Pythonは実際にあなたが望んでいるグローバルxを使用します。
  • グローバルにxを使用するようにPythonを強制するには、最初の行にglobal xを追加してstupid()を挿入します。
5

そのコードはしかし、すべての関数内であれば、xは、グローバル変数ではないので、globalは、仕事に行くのではありません。 Pythonの3.xのでは、彼らは関係なく、それはトップレベルで、または関数の内部であるかどうかのコードの作業になるだろうnonlocalキーワード、導入:

x=True 
def stupid(): 
    nonlocal x 
    x=False 
stupid() 
print x 
関連する問題