4.ローカル変数とグローバル変数について

4.ローカル変数とグローバル変数について

変数には、ローカル変数とグローバル変数があり、ローカル変数は関数の中で定義されている変数のことである。次のコードでは、関数 "func1" の中で変数 "a" が定義されているので、変数 "a" はローカル変数となる。

def func1():

    a = 10   # ローカル変数

    print(a)

func1()

実行結果

10

 

次のコードでは、関数 "func2" の外で変数 "a" が定義されているので、変数 "a"はグローバル変数となる。つまり、グローバル変数とは、関数外で定義されている変数のことである。

a = 1000   # グローバル変数

def func2():

    print(a)

func2()

実行結果

1000

 

ローカル変数とグローバル変数の決定的な違いを、変数スコープ(変数が有効な範囲)の違いとして、ローカル変数とグローバル変数を同時に用いる場合の次のサンプルコードで確認する。

a = 1          # グローバル変数

def func3():

    a = 1000   # ローカル変数

    print(a)

func3()

実行結果

1000

 

この場合、結果として出力されるのは、「1」「1000」のどちらかを考えると、答えは「1000」となる。これは、関数func3が実行される際に、関数内の変数aが参照されているためである。では、次のサンプルコードではどうか。答えとして出力されるのは「1」で、グローバル変数が参照されたことになる。

a = 1         # グローバル変数

def func4():

    a = 1000  # ローカル変数

print(a)

func4()

実行結果

1

 

ローカル変数とグローバル変数の違いは、ローカル変数が変数を宣言した関数内でのみ有効(利用可能)であり、グローバル変数はプログラム内のどこでも有効(利用可能)であるということである。次のサンプルコードでは、ローカル変数を関数外で利用しようとしてエラーとなる例であり、ローカル変数が関数内でのみで有効となっていることが理解できる。このように、ローカル変数とグローバル変数は、その有効範囲が異なるということが明確に理解できる。

a = 1        # グローバル変数

def func5():

    b = 1000 # ローカル変数

    print(a)

func5()

print(b)     # エラー発生

実行結果

NameError: name 'b' is not defined

 

ローカル変数とグローバル変数の名称については、ローカル変数とグローバル変数は同じ名称でも共存可能であり、Pythonは明確に読み分け正常に動作する。つまり、Pythonの動きとしては、まずローカル変数を探しに行き、無ければグローバル変数を参照するような動きをする。

a = 1         # グローバル変数

def func6():

    a = 1000  # ローカル変数

    print (a)  # ローカル変数を表示

func6()

print (a)      # グローバル変数を表示

実行結果

1000

1

 

別の関数名であれば同じ名称のローカル変数を定義しても可能。

a = 1          # グローバル変数

def func7():

    a = 1000  # ローカル変数

    print(‘=’,a)

    a = "Hello World"  # ローカル変数

    print(“=,a)

func7()

func8()

print(“=”,a)

実行結果

=1000

=Hello World

=1

 

変数スコープが重複しなければ変数名称は被ってもエラーは発生しない。逆に変数スコープが重複している場合では、同じ変数名を利用すると上書きされるので注意が必要である。

def func7():

    a = 1000          # ローカル変数

    a = "Hello World"  # ローカル変数

    print(a)

func7()

実行結果

Hello World

 

関数内で定義する変数はローカル変数であるとしたが、実は関数内でもグローバル変数の値を宣言することが可能である。その方法は、関数内の定義でglobal変数名として宣言し、ローカル変数をグローバル変数に変更する方法である。3行目のglobalは、これから使用する変数aが「グローバル変数である」ということを宣言する役割を担っている。

a=1

def func9():

    global a  # aglobal変数名として宣言

    a = 1000  # global変数aに整数値1000を代入

    print(a)

func9()

print(a)

実行結果

1000

1000

 

ゆえに、次のサンプルプログラムのように、グローバル変数が既に存在している場合は上書きすることになる。

a = 1

def func9():

    global a   # aglobal変数名として宣言

    a = 1000  # global変数aに1000を上書き

    print(a)

func9()

print(a)

実行結果

1000

1000


このブログの人気の投稿

小論文 統計的因果推論の現場適用による排泄ケアの展望

排泄ケア相談員の育成に向けて

解説 排泄ケアの相談支援計画書作成のためのチェックリスト