【Python】グローバル変数とローカル変数の違い・宣言

スポンサーリンク

Pythonで「グローバル変数」と「ローカル変数」について。

この記事の内容はコチラです

  • Pythonで「グローバル変数」と「ローカル変数」の違い
  • グローバル変数の宣言の方法
  • 「グローバル変数」と「ローカル変数」のスコープの違い

今回は、Pythonの「グローバル変数」と「ローカル変数」の宣言や違いを解説します。

Python グローバル変数とローカル変数の宣言・違い

ローカル変数

Pythonの変数には「ローカル変数」があります。

「ローカル変数」とは文字通り、ローカルな変数のことです。変数が使える範囲(スコープ)が狭く、変数が生成された関数内でしか使えません。

# 足し算関数
def cul_Plus(num):
    num_p = 1
    return num_p + num

関数「cul_Plus」」作成しました。足し算をする単純な関数です。

関数内にある「num_p」がローカル変数になります。もう一つの変数「num」は関数の引数(パラメーター)ですね。

ローカル変数はその関数内でしか使えない

このローカル変数「num_p」は関数内でしか使えません。

# 関数を使う
ret = cul_Plus(1)

print(ret)
#[結果] 2
print(num_p)
#[結果] NameError: name 'num_p' is not defined

先の関数を実行しました。呼び出し側で関数内のローカル変数「num_p」を使おうとすると、エラーになりました。

ローカル変数の範囲(スコープ)は関数の中だけです。

ここでは関数「cul_Plus」の中だけで有効です。関数「cul_Plus」の外では使えません。

では、変数をいろいろなところで使いまわしたい場合はどうするか?もちろん変数を引数として渡していく方法が一般的ではありますが、それ以外にグローバル変数という方法もあります。

グローバル変数

# 足し算関数
def cul_Plus(num):
    global num_p
    num_p = 1
    return num_p + num
num_p = 0

# 関数を使う
ret = cul_Plus(1)

print(ret)
#[結果] 2
print(num_p)
#[結果] 1

先ほどの「ローカル変数」のコードを「グローバル変数」におきかえてみます。

関数「cul_Plus」の中に「global num_p」を追加しました。変数の前に「global」をつけるのがグローバル変数です。グローバル変数は関数外でも使えるようになります。

関数「cul_Plus」を呼び出す前に「num_p = 0」を1行追加しました。ここではグローバル変数にゼロをセットしました。

今回はエラーとなはらず「num_p」の値「1」が取得できました。これは「num_p」が「グローバル変数」となったからです。

「グローバル変数」は関数の中でも外でも使えます。

関数内では「num_p = 1」として使いました。関数の外では「num_p = 0」として使いました。

グローバル変数を使わないと結果が変わる

上のコードの「global num_p」の「global」を削除したらどうなると思いますか?

# 足し算関数
def cul_Plus(num):
    num_p = 1
    return num_p + num
num_p = 0

# 関数を使う
ret = cul_Plus(1)

print(ret)
#[結果] 2
print(num_p)
#[結果] 0

グローバル変数の定義「global」を削除すると「num_p」の結果が「0」になりました。

関数内の「num_p」は関数内だけで有効な変数です。関数外の「num_p」は関数の外だけで有効な変数です。2つの変数名「num_p」は同じなので、同じ変数と勘違いしがちですが、違うものです。

これがグローバル変数であれば同じ変数になりますが、グローバル変数でないと別々の変数になります。ここに注意してください!

以上、Pythonのローカル変数とグローバル変数の宣言や違いについてでした。

コメント