pythonで使用するスコープ変数という考え方

変数には、その変数が有効な範囲というものが決められています。この範囲をスコープといいます。スコープにはグローバルスコープローカルスコープの2つがあります。

グローバルスコープ

プログラム全体で有効となるスコープをグローバルスコープといいます。関数の外部で値を代入した変数はグローバルスコープとなって、任意の関数からでもアクセスが可能です。このような変数をグローバル変数といいます。

num = 1

def test():
	print(num)

test()

上記コードで、変数numに代入した値は、関数の外部で値を代入しているため、グローバルスコープとなります。そのため、test関数の内部からもアクセスが可能です。

ローカルスコープ

関数の内部で値を代入したスコープは、その関数の内部でしか使用できません。このような変数をローカルスコープといいます。

def test():
	num = 1

print(num)

上記コードのように、test関数の内部で変数numに値を代入しています。この場合の変数はローカルスコープとなるため、外部からアクセスすることはできません。

上記コードを実行すると、以下の様にエラーが発生します。

% python scope.py
Traceback (most recent call last):
  File "scope.py", line 4, in <module>
    print(num)
NameError: name 'num' is not defined

グローバルスコープとローカルスコープに同じ名前の変数を付けた場合

グローバルスコープとローカルスコープに同じ名前の変数を付けた場合、関数の内部ではローカルスコープが優先されます。

num = 1

def test():
    num = 2
    print ("関数内のprint:",num)

test()

print("関数外のprint:",num)

上記コードでは、グローバルスコープとローカルスコープで同じ変数numを使用しています。関数の内部と外部で変数numの値を表示させるようにして実行した結果が以下の通りです。

% python scope.py
関数内のprint: 2
関数外のprint: 1

実行してみると、関数内部ではローカルスコープが優先され、関す外部ではグローバルスコープの値が表示されます。

関数内でグローバルスコープを操作する

関数内でグローバルスコープの変数に値を代入する場合は、関数の先頭にglobal文を記述します。

global 変数名

num = 1

def test():
    global num
    num = 2
    print ("関数内のprint:",num)

test()

print("関数外のprint:",num)

global文を使用して、変数numをグローバルとして宣言します。実行結果は以下の通りです。

% python scope.py
関数内のprint: 2
関数外のprint: 2

関数の内部で代入した値がグローバル変数のnumへの代入となるため、関数内の変数も関数外の変数も「2」となります。

関連記事

メールマガジン

ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!

「初心者にも理解できるネットワーク技術」

これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。

もちろん無料です!!

↓メールマガジン購読はこちら↓

メールアドレス: