MRが楽しい

MRやVRについて学習したことを書き残す

Pythonでグローバル変数を利用する

本日は Python の小ネタ枠です。
Pythonグローバル変数を利用する方法を記事にします。

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

Pythonでは関数外で定義した変数をグローバル変数、関数内で定義した変数をローカル変数と呼びます。
関数内からグローバル変数を参照することはできますが、関数外でローカル変数を参照することはできません。
変数が利用可能な範囲の事をスコープと呼びます。

サンプル

関数内からグローバル変数を参照する
# グローバル変数を作成
message = "Hello"

def test_method():
    # 関数内でグローバル変数を参照する
    print(message)

# 関数呼び出し
test_method()

以下の通り、変数の値を参照することができます。
f:id:bluebirdofoz:20200808224724j:plain

関数外からローカル変数を参照する
def test_method():
    # ローカル変数を作成
    message = "Hello"

# 関数呼び出し
test_method()

# 関数外でローカル変数を参照する
print(message)

以下の通り、変数の値を参照できず、エラーが発生します。
f:id:bluebirdofoz:20200808224733j:plain

グローバル変数への代入

注意点として関数内でグローバル変数と同名の変数へ代入を行った場合、ローカル変数として扱われます。
グローバル変数の値を関数内から書き換える場合、代入前に global 宣言を利用する必要があります。

サンプル

宣言を行わずに関数内からグローバル変数を変更する
# グローバル変数を作成
message = "Hello"

def change_message():
    # 関数内で変数を代入する
    message = "Goodbye"
    
    # 関数内での変数値
    print("in: " + message)

# 関数呼び出し
change_message()

# 関数外での変数値
print("out: " + message)

以下の通り、関数外ではグローバル変数の値が変更されていません。
f:id:bluebirdofoz:20200808224743j:plain

global宣言を利用して関数内からグローバル変数を変更する
# グローバル変数を作成
message = "Hello"

def change_message():
    # グローバル変数を取得する
    global message

    # 関数内で変数を代入する
    message = "Goodbye"
    
    # 関数内での変数値
    print("in: " + message)

# 関数呼び出し
change_message()

# 関数外での変数値
print("out: " + message)

以下の通り、関数外でもグローバル変数の値が変更されています。
f:id:bluebirdofoz:20200808224750j:plain