【Python】13_ローカル変数とグローバル変数

Python Python

Pythonでは、変数の有効範囲(スコープ)によって、変数がアクセス可能な範囲が決まります。変数にはローカル変数グローバル変数の2種類があり、それぞれ異なるスコープを持っています。

この記事では、ローカル変数とグローバル変数の違い、使い方、スコープに関する詳細について解説します。

グローバル変数とは?

グローバル変数とは、
プログラム全体でアクセスできる変数のことです。関数の外側で定義された変数は、グローバルスコープを持ち、スクリプト全体のどこからでもアクセスできます。

例: グローバル変数の定義とアクセス

x = 10  # グローバル変数

def display_x():
    print(x)  # 関数内でもグローバル変数にアクセス可能

display_x()  # 10
print(x)     # 10

この例では、x は関数の外で定義されているため、グローバル変数となります。関数内でも、関数の外でも x にアクセスできます。

グローバル変数の特徴

  • スコープ
    プログラム全体(モジュール全体)がスコープとなります。

  • 関数内からの参照
    関数内からでも読み取り可能です(ただし、関数内で変更するには特別な宣言が必要です)。

ローカル変数とは?

ローカル変数は、関数の内部で定義された変数で、その関数内でのみ有効です。関数の外からはローカル変数にアクセスすることはできず、関数の処理が終了するとローカル変数は破棄されます。

例: ローカル変数の定義とスコープ

def my_function():
    y = 5  # ローカル変数
    print(y)

my_function()  # 5
# print(y)  # エラー: yは関数の外では参照できない

この例では、y は my_function() 関数の内部で定義されたローカル変数です。関数の外では y にアクセスできないため、エラーが発生します。

ローカル変数の特徴

  • スコープ
    定義された関数内のみがスコープです。

  • 外部からのアクセス不可
    関数の外からローカル変数にアクセスすることはできません。

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

グローバル変数を関数内で変更する方法

関数内でグローバル変数を変更するには、global キーワードを使って、その変数がグローバルスコープにあることを明示する必要があります。これを使わない場合、関数内でグローバル変数に同じ名前の変数を定義すると、ローカル変数として扱われてしまいます。

例: global キーワードの使用

x = 10  # グローバル変数

def modify_x():
    global x  # グローバル変数を参照
    x = 20  # グローバル変数を変更

modify_x()
print(x)  # 20

この例では、global x を使って、関数内でグローバル変数 x を参照し、その値を変更しています。

ローカル変数とグローバル変数の同名の処理

関数内でローカル変数とグローバル変数が同じ名前を持っている場合、Pythonはローカル変数を優先します。そのため、関数内で同じ名前の変数を使うと、ローカルスコープでの処理が行われ、グローバル変数には影響を与えません。

例: ローカルとグローバル変数が同名

x = 10  # グローバル変数

def my_function():
    x = 5  # ローカル変数
    print(x)  # ローカル変数が優先される

my_function()  # 5
print(x)       # 10(グローバル変数は影響を受けない)

この例では、関数内の x はローカル変数として扱われ、グローバル変数 x は変更されません。

関数内での変数の優先順位(LEGB ルール)

Pythonには、LEGB ルールと呼ばれる変数のスコープを探索する順序があります。これは、Pythonが変数を解決する際にどのスコープを優先して探すかを示しています。

  • Local: 関数内で定義されたローカル変数が最優先です。

  • Enclosing: 関数をネストしている外側の関数の変数。

  • Global: モジュールレベルのグローバル変数。

  • Built-in: Pythonのビルトイン関数や定数。

例: LEGB ルール

x = 10  # グローバル変数

def outer_function():
    x = 20  # Enclosing スコープの変数

    def inner_function():
        x = 30  # Local スコープの変数
        print(x)  # Local スコープが優先される

    inner_function()

outer_function()  # 30

この例では、inner_function() 内で x が定義されているため、ローカルスコープが最優先されます。

まとめ

  • グローバル変数は、関数の外で定義され、プログラム全体でアクセスできる変数です。関数内からも読み取れますが、変更するには global キーワードが必要です。

  • ローカル変数は、関数の内部で定義され、その関数内でのみ有効です。関数外からはアクセスできません。

  • 同名の変数が関数内外で存在する場合、関数内ではローカル変数が優先され、グローバル変数は影響を受けません。

  • PythonはLEGB ルールに従って、ローカル、エンクロージング、グローバル、ビルトインの順に変数を探索します。

コメント

PAGE TOP
タイトルとURLをコピーしました