Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのglobalキーワードとは?変数スコープの基本と使い方を実例で解説

プログラミングでは、あるスコープ内で宣言した変数の値を、そのスコープの外側から参照したり変更したりしたい場面があります。このようなときに役立つのが、Pythonのglobalキーワードです。関数内で変数名の前にglobalと記述することで、その変数をグローバル(大域)スコープとして扱えるようになります。なお、関数の外で宣言された変数は、自動的にグローバルスコープになります。

関数の外で宣言された変数

次の例では、変数は関数の外で宣言されていますが、関数の中から問題なくアクセスできています。これは、関数外で宣言された変数がすでにグローバルスコープを持っているためです。

サンプルコード

x = 56

def func():
    y = x * 2
    return y

print(func())

実行結果

112

関数の中で変数を変更しようとすると?

続いて、関数の中でグローバル変数の値を直接変更しようとした例を見てみましょう。この場合、エラーが発生します。

サンプルコード

x = 56

def func():
    y = x * 2
    x = x + 2
    return y

print(func())

実行結果

UnboundLocalError: local variable 'x' referenced before assignment

このエラーが発生するのは、関数内でxへの代入が行われているため、Pythonがxをローカル変数として扱おうとする一方で、代入より先に参照してしまうからです。つまり、関数内でグローバルスコープの変数の値を変更するには、明示的な宣言が必要になります。

globalキーワードによる解決

関数内でグローバル変数の値を変更する唯一の方法は、関数内でその変数をglobalとして宣言することです。

サンプルコード

x = 56

def func():
    global x
    x = x + 2
    y = x * 2
    return y

print(func())

実行結果

116

global xと宣言することで、関数内のxはグローバル変数そのものを指すようになり、値の変更が可能になりました。

ネストした関数でのglobalキーワード

関数が入れ子(ネスト)になっている場合も同様に、最も内側の関数でglobal宣言を行うことで、グローバル変数を作成・操作できます。以下の例では、内側の関数func_in()の中でxをグローバル変数として宣言しています。

サンプルコード

def func_out():
    x = 56

    def func_in():
        global x
        x = 20
        print("x is: ", x)
        x = x + 3
        y = x * 2
        print("y is: ", y)

    func_in()

func_out()
print("x is: ", x)

実行結果

x is: 20
y is: 46
x is: 23

注目すべきは最後の出力です。func_in()内でglobal xと宣言したため、新たなグローバル変数xが作成され、その後+3されて23となっています。外側の関数のローカル変数x = 56とは別物として扱われている点に注意してください。

まとめ

globalキーワードを使えば、関数内からグローバル変数の値を参照・変更できます。ただし、多用するとプログラムの可読性や保守性が低下するため、必要最小限にとどめるのが良い設計とされています。また、ネストした関数で「外側の関数のローカル変数」を扱いたい場合は、globalではなくnonlocalキーワードを使う点も覚えておきましょう。

  1. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ

  2. Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説

    この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ