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

Pythonのグローバル変数とローカル変数を徹底解説!スコープの基本と使い方ガイド

プログラミングにおいて、変数は最も重要かつ頻繁に登場する概念のひとつです。変数はデータを格納するための「入れ物」であり、ユーザー名やメールアドレス、オンラインゲームのインベントリ内のアイテムなど、さまざまな種類のデータを保存できます。

Pythonでプログラミングを行う際には、「グローバル変数」と「ローカル変数」という2種類の変数に出会うことになります。本記事では、この2つの違い、それぞれの仕組み、そしてコードでの具体的な使い方について詳しく解説します。

Pythonにおける変数の基本

Pythonでは、変数を使ってデータに名前(ラベル)を付け、保存することができます。変数を定義するときには名前を付けます。その後、コード内でその名前を使えば、対応するデータをいつでも取り出せます。変数には文字列、数値、リストなど、あらゆるデータ型を格納可能です。

例えば、ゲームを開発していてユーザーの名前を保存したいとしましょう。プログラム中に何度も名前を直接書き込む代わりに、変数に保存しておけば管理がぐっと楽になります。

以下は、ゲームのユーザー名を保存する変数の例です:

name = "Carlton Hernandez"

ここでは name という変数を宣言し、"Carlton Hernandez" という値を代入しました。

変数を宣言した後は、コードの中で自由に操作できます。例えば、ユーザーの名前を変更したい場合は次のように書きます:

name = "Carlton Hernandez"
name = "Carlton Lewis Hernandez"

1行目で name 変数に "Carlton Hernandez" を代入し、続けて同じ変数に "Carlton Lewis Hernandez" を代入しています。変数に新しい値を代入すると、以前の値は上書きされ、新しい値に置き換えられます。

Pythonのグローバル変数とは

Pythonの変数には、主に「ローカル」と「グローバル」という2種類があります。

グローバル変数とは、関数の外で宣言された変数のことです。グローバル変数は「グローバルスコープ」を持つため、関数の中を含むプログラム全体からアクセスできます。

以下はグローバル変数の例です:

name = "Carlton Hernandez"

グローバル変数を宣言すれば、コードのどこからでも利用できます。例えば、グローバル変数 name の値を出力する関数は、次のように作成できます:

def printName():
	print(name)

printName()

実行結果:

"Carlton Hernandez"

ここでは printName() という関数を定義しました。この関数が呼び出されると、name 変数の値がコンソールに出力されます。上記の出力は、まさにこの関数を呼び出した結果です。

Pythonのローカル変数とは

一方、ローカル変数とは、関数の中で宣言された変数のことです。ローカル変数は「ローカルスコープ」を持ち、宣言された関数の中でしかアクセスできません。

以下はローカル変数を使ったプログラムの例です:

def printName():
	name = "Georgia Anderson"
	print(name)

printName()

実行結果:

"Georgia Anderson"

このコードでは printName() 関数を定義し、その中で name 変数を定義しています。関数内で宣言されているため、この変数はローカル変数です。

コードの最後で printName() を呼び出すと、プログラムはこの関数を実行します。

この例の name 変数は printName() 関数に対してローカルなため、関数の外からはアクセスできません。試しに関数の外でこのローカル変数を出力してみるとどうなるでしょうか:

def printName():
	name = "Georgia Anderson"
	print(name)

printName()
print(name)

実行結果:

NameError: name 'name' is not defined

ローカル変数は、それを定義した関数の外からはアクセスできません。メインプログラム側からローカル変数にアクセスしようとすると、このようにエラーが発生します。

同名のグローバル変数とローカル変数の使い方

プログラムでは、同じ名前のローカル変数とグローバル変数を併用することも可能です。この場合、ローカルスコープではローカル変数が、グローバルスコープではグローバル変数が参照されます。

以下は、同じ名前を持つローカル変数とグローバル変数を使ったプログラムの例です:

score = 5

def calculateScore():
	score = 10
	print("Final Score:", score)

calculateScore()
print("Initial Score:", score)

実行結果:

Final Score: 10
Initial Score: 5

まず、グローバル変数 score を定義しました。次に calculateScore() 関数の中で、同じ名前のローカル変数を作成しています。

calculateScore() 関数内のローカル変数 score の値は10なので、関数を呼び出すと "Final Score: 10" が出力されます。

しかし、関数の外では score の値は5のままです。これは、グローバルスコープで score に5を設定しているためです。そのため "Initial Score:" に続けて score の値を出力すると、5が表示されます。

globalキーワードで関数内からグローバル変数を操作する

これまで、グローバル変数は関数の外で、ローカル変数は関数の中で定義されることを学びました。しかし、global キーワードを使って関数内で変数を定義し、その関数をプログラム上で実行すると、その変数はグローバル変数になります。

以下の例を見てみましょう:

def setName():
	global name
	name = "Bianca Peterson"

setName()
print(name)

実行結果:

"Bianca Peterson"

このコードでは、setName() 関数の中で name 変数に値を代入しています。しかし、変数を定義する前に global キーワードを使用しているため、name 変数にはグローバルスコープが与えられます。ただし、name が実際にグローバル変数になるのは、この関数をプログラム上で実行した後です。

setName() 関数が実行された後は、プログラム内で name 変数を使うたびに(print() 関数を実行したときのように)、ローカル関数内で宣言した値が参照されます。これは name がすでにグローバル変数になっているからです。

先ほど「関数の中からグローバル変数を直接変更することはできない」と説明しました。これは事実ですが、global キーワードを使えば、間接的に関数内からグローバル変数を変更できます。

以下は、関数内で global キーワードを使ってグローバル変数の値を変更するプログラムの例です:

name = "Bianca Peterson"

def setName():
	global name
	name = "Bianca Lucinda Peterson"

setName()
print(name)

実行結果:

"Bianca Lucinda Peterson"

コードを順番に見ていきましょう。まず name 変数を宣言し、"Bianca Peterson" を代入しました。これはグローバル変数です。次に setName() 関数を定義します。この関数が呼び出されると、name 変数の値が変更されます。

その後 setName() を呼び出したことで、name の値は "Bianca Lucinda Peterson" に更新されました。最後に name の値をコンソールに出力しています。グローバル変数 name の値は、この時点で "Bianca Lucinda Peterson" になっています。

一般的に、global キーワードは必要最小限にとどめるべきです。乱用すると、プログラム内の変数のスコープを把握しづらくなり、コードの可読性や保守性が低下します。

まとめ

グローバル変数は関数の外で宣言される変数、ローカル変数は関数の中で宣言される変数です。

グローバル変数は関数内から直接変更できませんが、global キーワードを使えば、グローバル変数の値を変更する関数を作成できます。この場合、実際に値が変わるのはその関数を実行したタイミングです。

本記事では、具体例を交えながらローカル変数とグローバル変数の基礎知識と仕組みを解説しました。これであなたも、プロのプログラマーのようにPythonコードでローカル変数とグローバル変数を使いこなせるはずです!

  1. Pythonの名前空間とスコープの仕組みをわかりやすく解説

    Pythonでは、変数・関数・ライブラリ・モジュールなど、さまざまな「名前」を扱います。ところが、使おうとした変数名が、すでに別の変数や関数、メソッドの名前として存在している――そんな場面に遭遇することは珍しくありません。このような名前の衝突を避けるためにも、Pythonがこれらの名前をどのように管理しているのかを理解しておく必要があります。その鍵となるのが「名前空間(namespace)」という概念です。 名前空間の3つの種類 Pythonの名前空間は、大きく次の3つに分類されます。 ローカル名前空間(Local Namespace)関数の中で定義された変数や関数の名前を保持する名前空

  2. Bash変数チュートリアル – 基本からグローバル変数・ローカル変数まで学べる6つの実用例

    Bash変数は、プログラムの実行期間中に必要となる情報を一時的に保存しておくための仕組みです。本記事はBashチュートリアルシリーズの一篇で、他のプログラミング言語と同様にBashでも変数を利用できることを踏まえ、基本的な使い方からグローバル変数とローカル変数の違いまでを、6つの実用的なサンプルを通じて解説します。 Bash変数の基本構文 変数の定義は非常にシンプルで、次の書式に従います。 VARNAME=VALUE 注意: 変数へ代入する際は、「=」記号の前後にスペースを入れてはいけません。「VAR=VALUE」のように書けば、シェルは「=」を代入記号として認識し、この行を変数への代入とし