2022年1月6日木曜日

【ユーザー定義関数def】グローバル変数とローカル変数

 関数の中で定義された変数はローカル変数となり関数外では参照できない。また関数の外で定義された変数はグローバル変数となり関数内では参照はできるが書き換えができない。関数内でグローバル変数を書き換える際にはglobalによるグローバル変数宣言を行う必要がある。



1. グローバル変数とローカル変数

 関数の中で定義された変数はローカル変数となり関数内では値の参照や書き換えができるが、関数外では参照も書き換えもできない。

 関数testfunc内で定義された変数bを関数の外で参照する場合。定義されていないとしてエラーとなる。

def testfunc(a):
    b = 3
    c = a*b
    return c

print(testfunc(2), b)

実行結果

NameError: name 'b' is not defined


 関数の外で定義された変数はグローバル変数となり関数内では参照はできるが書き換えができない。

 関数外で定義された変数bを関数testfunc内で参照する場合。問題なく参照できる。

b = 3

def testfunc(a):
    c = a*b
    return c

print(testfunc(2), b)

実行結果

6 3

 関数外で定義された変数b=3を関数testfunc内でb=4に書き換えた場合。関数の戻り値は8となっており書き換えた値が使われているように見えるがbの値は3のままで書き換わっていない。関数内でbの値が変わったわけではなく新たにローカル変数bが定義されそれが関数内で用いられている。

b = 3

def testfunc(a):
    b = 4
    c = a*b
    return c

print(testfunc(2), b)

実行結果

6 3


2. globalによるグローバル変数宣言

 グローバル変数は関数内でglobalによりグローバル変数宣言を行うことで関数内で書き換えが可能になる。

 関数外で定義された変数b=3を関数testfunc内でグローバル変数宣言した上でb=4に書き換えた場合。bの値が書き換えられる。

b = 3

def testfunc(a):
    global b
    b = 4
    c = a*b
    return c

print(testfunc(2), b)

実行結果

8 4


3. リファレンス

Python チュートリアル > 4. その他の制御フローツール > 4.7. 関数を定義する

使用バージョン:Python 3.8.8

0 件のコメント:

コメントを投稿