2016-09-05 8 views
-7

私はPythonで始まります。私は新しい言語を試すのが好きです。だから私はスコープとPythonについて "単純な"問題があります。ここでPythonスコープの変数が自分の関数の外にあるのはなぜですか?

は私が世界のenvに私のVAR "myarrayのを" 共有したくない

def foo(myarray) 
    if myarray == False: 
    myarray = [[0] * 5 for _ in range(5)] 
    myarray[0][0] = 1 
    "some code ..." 
    foo(myarray) 

myarray = False 
foo(myarray) 

再帰関数です。 Pythonのスコープ "myarray"は、外部にない関数でのみ必要です。しかし、Pythonは "myarray"をグローバル変数として共有していました。スコープを関数に制限する方法は?

+2

コードに複数の構文エラーがあります。 – BrenBarn

+0

最大再帰深度エラーを取得しましたか? – wwii

+0

いいえ、これは私のコードの単なる例であり、私の問題を説明するだけです – user1913545

答えて

2

無数の構文エラーを無視して、myarray変数がグローバルに宣言されているようですが、そのためグローバルスコープを持っています。

+0

私はクラスに私の機能を置くべきでしょうか? – user1913545

+0

クラスは厳密には必要ではありません。 'myarray'変数は、スニペットの最後の2行目のインデントによってグローバルスコープで定義されています。このトリックは、Pythonがインデントを使用してコードブロックを区別することを覚えておくことです。 –

+0

Pythonの共有 'myarray'を防ぐために、 'foo(list(myarray))'のようなことができますか? – user1913545

関連する問題