【Python】ローカル変数とグローバル変数の違いを1分で解説

Python

このページでは、Pythonにおけるローカル変数とグローバル変数の違いについて端的に解説します。

簡単に言えば、ローカル変数とは関数(def文)の中で定義されている変数で、グローバル変数はそれ以外の変数のこと。

用語意味特徴
ローカル変数関数の中で定義されている変数定義した関数の中でのみ有効
グローバル変数関数の外で定義されている変数プログラム全体で有効
Pythonにおけるローカル変数・グローバル変数の意味

本ページでは、初心者向けに1からローカル変数とグローバル変数の違いをサンプルコード付きで分かりやすく解説します。

このページで学べる内容
  • 前提:変数とは?
  • 前提:関数(def文)とは?
  • ローカル変数とグローバル変数―変数スコープとは?
    • ローカル変数とグローバル変数の命名ルール

Pythonエンジニアであれば絶対に知っておきたい基本知識ですので、是非最後までご覧ください。

それでは早速解説を始めます。

スポンサーリンク

前提:変数とは?

まずは、このページの前提となる「変数」という言葉から。

「変数」なんでもう理解しているよ!という方はこの章は読み飛ばしてください。

変数(variable)とは、データを扱うメモリ領域のことを指します。メモリ領域というと言葉が難しくなるため、変数は「箱」に例えて説明されることが一般的です。

変数には、例えば数字や文字列、日付など様々な値を入れることができます。

この「箱」には、数字や文字列、日付など様々な値を入れることができます。「箱」の中の値を足し算してみたり、「箱」の中の値を画面に表示させてみたり、「箱」の中の値に応じて処理を変えてみたり、様々な用途で利用します。

Pythonでは、変数と変数の初期値を=(イコール)で結び変数を宣言します。

a = 100  # 変数宣言(変数a / 初期値100)
print(a) # 画面に100が表示されます
Pythonにおける変数の使い方を1から知りたい方は

前提:関数とは?

もう1つの前提、関数についても改めて解説します。

「関数」も理解OK!という方は、この章は読み飛ばしてください。

関数は、一言で言えば「複数の処理を1つにまとめて名前を付けたもの」。

プログラムをコーディングしていくと、同じような処理を複数回必要とする場合がでてきます。

このようなタイミングで、当該処理を予め構造化しておいて、何度も呼び出す形で利用することができればコード全体の「構造化」が図れ効率的なプログラミングが可能となります。

プログラムをコーディングしていくと、同じような処理を複数回必要とする場合がでてきます。このようなタイミングで、当該処理を予め構造化しておいて、何度も呼び出す形で利用することができればコード全体の「構造化」と「効率化」を向上させることが可能です。

この時に用いられるのが関数です。

Pythonでは、関数をdef文を用いて定義します。

def add_func(a,b):   # 関数「add_func」 引数⇒a/b
    return a + b
print(add_func(2,9)) # 関数の戻り値を表示


# 11

さて、ここから本題のローカル変数とグローバル変数の違いの説明です。

Python:ローカル変数

ローカル変数とは、関数の中で定義されている変数のことです。

def sample():
    a = 1      # ローカル変数
    print(a)

sample()



# 1

上記コードでは、関数 "sample" の中で変数 "a" が定義されているので、変数 "a" はローカル変数です。

Python:グローバル変数

逆にグローバル変数とは、関数外で定義されている変数のこと。

a = 1          # グローバル変数
def sample():
    print(a)

sample()


# 1

たったこれだけの違いなのですが、結局のところローカル変数とグローバル変数は何が違うのか?

答えは、変数スコープ(変数が有効な範囲)の違いです。

変数スコープ

変数スコープの違いを分かりやすく理解できるよう、いくつかサンプルコードを用いて説明していきます。

まずは、ローカル変数とグローバル変数を同時に用いる場合のサンプルコードから。

a = 1          # グローバル変数
def sample():
    a = 1000   # ローカル変数
    print(a)

sample()

この場合、結果として出力されるのは、「1」「1000」のどちらでしょうか?

答えは、「1000」です。

これは、関数 "sample" が実行される際に、関数内の変数 "a" が参照されているためです。

では、こちらの場合はどうでしょう?

a = 1          # グローバル変数
def sample():
    a = 1000   # ローカル変数
    print(a)

print(a)

出力されるのは「1」。

つまり、グローバル変数が参照されたということになります。

まとめ:グローバル変数とローカル変数の違い

簡単にローカル変数とグローバル変数の違いをまとめます。

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

ローカル変数
変数を宣言した関数内でのみ有効(利用可能)。

グローバル変数
プログラム内のどこでも有効(利用可能)。

以上を踏まえて、以下のサンプルコードを見てみましょう。

a = 1          # グローバル変数
def sample1():
    b = 1000   # ローカル変数
    print(a)

print(b)


# NameError: name 'b' is not defined

このサンプルコードでは、ローカル変数を関数外で利用しようとしてエラーになっている例です。

ローカル変数が、関数内でのみ有効となっていることが分かります。

このように、ローカル変数とグローバル変数は、その有効範囲が異なるという点に最大の相違があることを理解しておきましょう。

ローカル変数とグローバル変数の名称

ここまで見てきたように、ローカル変数とグローバル変数は同じ名称でも共存可能です。(別々の名称に分けなくても正常に動作します。)

a = 1          # グローバル変数
def sample():
    a = 1000   # ローカル変数
    print(a)

sample()
print(a)


# 1000
# 1

Pythonの動きとしては、まずローカル変数を探しに行き、なければグローバル変数を参照するような動きをします。

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

a = 1          # グローバル変数
def sample1():
    a = 1000   # ローカル変数
    print(a)

def sample2():
    a = "Hello Python"  # ローカル変数
    print(a)

sample1()
sample2()
print(a)



# 1000
# Hello Python
# 1

要は、変数スコープが重複しなければ変数名称は被ってもOKということ。

逆に変数スコープが重複している場面で、同じ変数名を利用すると上書きされてしまうためそこは注意が必要です。

def sample():
    a = 1000   # ローカル変数
    a = "Hello Python!" # ローカル変数
    print(a)

sample()

# Hello Python!

global-関数内でグローバル変数を宣言

関数内でグローバル変数の値を宣言する方法について補足します。

(ローカル変数をグローバル変数に変更する方法)

先ほど、関数内で定義する変数はローカル変数であると説明しましたが、実は関数内でグローバル変数を宣言する方法もあります。

def sample():
    global a
    a = 1000   # グローバル変数
    print(a)

sample()
print(a)


# 1000
# 1000

上記3行目の "global" というのは、今から編集する変数aは「グローバル変数である」ということを宣言する役割を担っています。

したがって、グローバル変数が既に存在している場合は上書きするような処理になります。

a = 1
def sample():
    global a
    a = 1000   # ローカル変数
    print(a)

sample()
print(a)


# 1000
# 1000

Pythonを1から学習したい方は

Pythonをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。

そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。

各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    アウトプットは「最強のインプット」である!
  2. 備忘:忘れたとしても後から見返せるように。
    未来の自分への「お手紙」を書いています。
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    あなたの知識は誰かにとっての「価値ある情報」です。

副業ブログの始め方はこちらから

スポンサーリンク
Python
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました