fc2ブログ
Pythonと変数のスコープ
Pythonの変数のスコープについて面白い記事を読んだので、それに触発されて、基本的なことを書いて置こうかと思います。
Pythonのスコープはとてもシンプルです。組み込みのスコープを少し横に置いておけば、基本的には、グローバルと関数(クラス)定義の内側の区別だけになります。

a = 'abc'
def f():
print(a)
f()

とすると、結果はもちろん「'abc'」です。

a = 'abc'
def f():
a = 'xyz'
print(a)
f()
print(a)

こうすると、結果は、
'xyz'
'abc'
になります。関数定義の内側は別のスコープなので、変数aに新たに'xyz'が割り当てられますが、関数を抜ければもとのa='abc'が残ります。
関数定義の内側で、新しいスコープが作られるのは、透明な作業台が新たに用意されると考えると分かり易いかもしれません。新しく用意される作業台は透明なので、すでにある変数aを見ることは出来ます。ただこの作業台は別物なので、そこで変数aを新たに定義できて、これは元々あるaには影響を与えません。加えて、新たなaは、元からあるaに重なるので、元のaは見えなくなりますが、関数定義の外側へ行けば、作業台自体が無くなるので、新たに作ったaが台ごと消えて、元のaが再び使えるようになるというわけです。

分かり易いかと思って書いて見ましたが、なんか今ひとつか?まあ、とにかく、Pythonは変数のスコープもシンプルという事です。10数年前にJavaに突然飽きてPython乗り換えましたが、やっぱりよく出来てるなーといまだに感心するところが多いです。
スポンサーサイト



【2015/06/28 19:51】 | Python | トラックバック(0) | コメント(0) | page top↑
| ホーム |