なぜグローバル変数にアクセスするために ‘global’ キーワードが必要ないのか?

PYTHON3 チュートリアル

グローバル変数と ‘global’ キーワードの役割

プログラミングにおいて、グローバル変数はプログラム全体からアクセス可能な変数です。Pythonでは、通常、関数内でグローバル変数を変更する際に ‘global’ キーワードを使います。しかし、特定の状況ではこのキーワードが必要ない場合があります。この記事では、その理由と例を詳しく説明します。

グローバル変数の基本的な使い方

まずは、Pythonにおけるグローバル変数の基本的な使い方を確認しましょう。以下のサンプルコードは、グローバル変数を参照する方法を示しています。

x = 10

def print_global():
    print(x)

print_global()  # 出力: 10

この例では、関数 print_global() 内でグローバル変数 x を参照しています。グローバル変数の値を読み取るだけであれば、特に ‘global’ キーワードは必要ありません。

グローバル変数を変更する際の ‘global’ キーワードの必要性

グローバル変数を関数内で変更する場合、通常は ‘global’ キーワードが必要です。以下の例で説明します。

y = 5

def modify_global():
    global y
    y = 20

modify_global()
print(y)  # 出力: 20

このコードでは、関数 modify_global() 内でグローバル変数 y を変更しています。ここで ‘global’ キーワードを使用することで、関数内で y をグローバルスコープの変数として認識させています。

‘global’ キーワードが不要な場合

次に、なぜ ‘global’ キーワードが不要な場合があるのかを見てみましょう。Pythonでは、特定のデータ型、特にミュータブルなオブジェクト(リストや辞書など)の場合、’global’ キーワードを使わずにその内容を変更できます。

z = [1, 2, 3]

def modify_list():
    z.append(4)

modify_list()
print(z)  # 出力: [1, 2, 3, 4]

この例では、リスト z に要素を追加しています。リストはミュータブルなオブジェクトであるため、’global’ キーワードを使用せずにその内容を変更可能です。これは、リスト自体の参照が変更されていないためです。

まとめ

グローバル変数にアクセスする際、’global’ キーワードが常に必要なわけではありません。変数の値を読み取るだけの場合や、ミュータブルなオブジェクトの内容を変更する場合には必要ありません。しかし、イミュータブルな変数の値を変更する場合には、’global’ キーワードが必要です。これを理解することで、より効率的にPythonプログラムを構築できます。

グローバル変数にアクセスするために ‘global’ キーワードが必要ない理由は、Pythonのスコープ(変数の有効範囲)の仕組みにあります。Pythonでは、関数内で変数を定義すると、その変数はその関数内でのみ有効なローカル変数として扱われます。つまり、関数内でグローバル変数を参照する場合、通常は ‘global’ キーワードを使用する必要がありますが、Pythonでは ‘global’ キーワードを使用せずにグローバル変数にアクセスできます。

Pythonでは、関数内で変数を参照する際、まずローカルスコープ(関数内で定義された変数)を検索し、見つからない場合にはグローバルスコープ(スクリプト全体で定義された変数)を検索します。そのため、関数内でグローバル変数を参照する際には、明示的に ‘global’ キーワードを使用する必要がなく、Pythonが自動的にグローバルスコープを検索して適切な変数を見つけることができます。

購読
通知
0 Comments
Inline Feedbacks
View all comments