【Python超入門】「ローカル変数」と「グローバル変数」の違いとglobal宣言

Pythonにおける「ローカル変数」と「グローバル変数」の違いについて入門者向けにまとめました。

「ローカル変数」と「グローバル変数」の違い

グローバル変数とは、関数の外で定義された変数で、どの関数からでも「参照」できます。
一方、ローカル変数とは、関数の中で定義された変数で、その関数の中でしか使えません。

サンプルコード

以下のコードを例に見てみましょう。

# ファイアボルトのダメージを計算する関数(引数1:魔力, 引数2:武器の攻撃力, 引数3:属性ボーナスを考慮)
def calc_firebolt_damage(magic_power, weapon_attack, element_bonus):
    # ダメージ計算式:魔力×2 + 武器攻撃力 + 属性ボーナス
    damage = magic_power * 2 + weapon_attack + element_bonus
    return damage

# 魔法使いルーナ(魔力10、杖の攻撃力5、炎属性ボーナス+3)
luna_damage = calc_firebolt_damage(10, 5, 3)

# 勇者ぴこり(魔力20、剣の攻撃力10、炎属性ボーナス+0)
pikori_damage = calc_firebolt_damage(20, 10, 0)

# 僧侶あくび(魔力30、聖杖の攻撃力2、炎属性ボーナス+5)
akubi_damage = calc_firebolt_damage(30, 2, 5)

# 結果を表示
print(f"魔法使いルーナは「ファイアボルト」を放った!敵に {luna_damage} のダメージを与えた!")
print(f"勇者ぴこりは「ファイアボルト」を放った!敵に {pikori_damage} のダメージを与えた!")
print(f"僧侶あくびは「ファイアボルト」を放った!敵に {akubi_damage} のダメージを与えた!")
魔法使いルーナは「ファイアボルト」を放った!敵に 30 のダメージを与えた!
勇者ぴこりは「ファイアボルト」を放った!敵に 50 のダメージを与えた!
僧侶あくびは「ファイアボルト」を放った!敵に 70 のダメージを与えた!

上記コードの中だと、「ローカル変数」と「グローバル変数」は以下のとおりです。

  • ローカル変数 → 関数内で定義されているdamagemagic_powerweapon_attackelement_bonus
  • グローバル変数 → 関数外で定義されているluna_damagepikori_damageakubi_damage

グローバル変数を関数内で書き換える

グローバル変数を関数内で書き換えるには、以下のように関数内で global 宣言を使う必要があります。

# グローバル変数:ファイアボルトの使用回数
firebolt_count = 0

# ファイアボルトのダメージを計算し、使用回数を更新する関数
def calc_firebolt_damage(magic_power, weapon_attack, element_bonus):
    global firebolt_count  # グローバル変数を関数内で使う宣言(global宣言)
    firebolt_count += 1    # 使用回数を1増やす

    damage = magic_power * 2 + weapon_attack + element_bonus
    return damage

# 魔法使いルーナ(魔力10、杖の攻撃力5、炎属性ボーナス+3)
luna_damage = calc_firebolt_damage(10, 5, 3)

# 勇者ぴこり(魔力20、剣の攻撃力10、炎属性ボーナス+0)
pikori_damage = calc_firebolt_damage(20, 10, 0)

# 僧侶あくび(魔力30、聖杖の攻撃力2、炎属性ボーナス+5)
akubi_damage = calc_firebolt_damage(30, 2, 5)

# 結果を表示
print(f"魔法使いルーナは「ファイアボルト」を放った!敵に {luna_damage} のダメージを与えた!")
print(f"勇者ぴこりは「ファイアボルト」を放った!敵に {pikori_damage} のダメージを与えた!")
print(f"僧侶あくびは「ファイアボルト」を放った!敵に {akubi_damage} のダメージを与えた!")

# ファイアボルトの使用回数を表示
print(f"ファイアボルトは合計 {firebolt_count} 回使われました!")
魔法使いルーナは「ファイアボルト」を放った!敵に 30 のダメージを与えた!
勇者ぴこりは「ファイアボルト」を放った!敵に 50 のダメージを与えた!
僧侶あくびは「ファイアボルト」を放った!敵に 70 のダメージを与えた!
ファイアボルトは合計 3 回使われました!

グローバル変数 firebolt_countは、関数の外で定義され、関数内からは global 宣言で更新可能です。

関連ページ(もっと学びたい人へ)

Pythonの関数の使い方について、、以下ページから詳しく学ぶことができます。

【Python超入門】ユーザー定義関数の作り方(def文)
Pythonにおけるユーザー定義関数の作り方(def文)について入門者向けにまとめました。

Pythonの基礎から応用例まで、以下ページから詳しく学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
Python基礎

コメント