2016-09-19 3 views
-2

タイトルは問題ではありません。この問題はすでに「不変で変更可能な」ものを理解することで解決しました。 しかし、私はそれについてちょっと分かりました。 私は彼をチューニングせずに、最初に作成したシャドウを作成するだけで、オブジェクトに別の関数がアピールできるようにします。 私はコードであなたを示しています。私は不変の新しいオブジェクトを作成したdidntのためリストは "global"に一変します - python

def text(): 
    print x 

x = 6 
text() 

この例では、うまく動作whill。 この:

def text(): 
    print x 

text() 
x = 6 

整数はグローバル変数ではないので、これは動作しません。

グローバル化しないで新しいオブジェクトを作成したときに、どういうことが起こりますか?メモリ内のどこにこのオブジェクトがあるかによって、私は別のスコープでそれに近づくことができました。なぜそれほどグローバルとは異なるのでしょうか?

+1

Pythonコードはコンパイルされているのではなく解釈されるので、変数xは、2番目の例でtext()が呼び出されたときには決して起こりません。それは決して起こらなかった理由です。 – thiruvenkadam

答えて

0

関数内で、に変数を割り当て、変数にglobalを使用しない場合、その変数はローカルです。 だけを変数を使用して割り当てていない場合は、外側のスコープ(この場合はモジュールレベル)から来たものと見なされます。

これは、最初のモジュールがモジュールレベル変数を使用する理由です。

text()が呼び出されたときに、モジュールレベルの変数がまだ存在しないため、2番目のコードは機能しません。

関連する問題