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

Pythonのグローバル変数とローカル変数の違いを徹底解説!スコープとglobalキーワードの基本

Pythonの変数には、大きく分けて「グローバル変数」と「ローカル変数」の2種類があります。

グローバル変数のスコープはプログラム全体に及ぶためどこからでもアクセスできますが、ローカル変数のスコープは、その変数が定義された関数の中だけに限定されます。

def func():
    x = "Python"
    print(x)
    print(s)

s = "Tutorialspoint"
print(s)
func()
print(x)

上記のプログラムでは、xがローカル変数、sがグローバル変数です。ローカル変数は、それを定義した関数(この場合はfunc())の中からしかアクセスできず、スコープ外から参照しようとするとNameErrorが発生します。最終行のprint(x)がまさにその例です。

一方、グローバル変数はプログラム内のどこからでも呼び出せます。関数の外側はもちろん、プログラム内で定義された関数(func()など)の中からでもアクセス可能です。

ローカル変数とは

ローカル変数には、そのスコープ(上の例でいうfunc()など)の内部からしかアクセスできません。

次のプログラムには、xyという2つのローカル変数があります。

def sum(x, y):
    total = x + y
    return total

print(sum(5, 10))

実行結果

15

xyは関数sum()の中でのみ有効で、関数の外側には存在しません。そのため、スコープ外でローカル変数を使おうとするとNameErrorが発生します。つまり、次のようなコードは動作しません。

print(x)  # NameError: name 'x' is not defined

グローバル変数とは

グローバル変数は、スコープがプログラム全体であるため、プログラム内のどこからでも使用できます。

シンプルな例で挙動を確認してみましょう。

z = 25

def func():
    global z
    print(z)
    z = 20

func()
print(z)

実行結果

25
20

func()を呼び出すと、globalキーワードによって関数内からグローバル変数zの値が書き換えられ、その変更はプログラム全体に反映されます。関数内でグローバル変数に代入したい場合は、必ずglobal宣言が必要になる点に注意しましょう。

ローカル変数・グローバル変数・引数を組み合わせた例

最後に、ローカル変数とグローバル変数、そして関数の引数を組み合わせた例を見てみましょう。

def func(x, y):
    global a
    a = 45
    x, y = y, x
    b = 33
    b = 17
    c = 100
    print(a, b, x, y)

a, b, x, y = 3, 15, 3, 4
func(9, 81)
print(a, b, x, y)

実行結果

45 17 81 9
45 15 3 4

この例では、関数内でglobal aと宣言しているため、aへの代入はグローバル変数aを直接書き換えます。そのため、関数呼び出し後もaの値は45のままです。

一方、bc、そして引数のxyはローカル変数として扱われるため、関数の外側にある同名の変数には一切影響しません。関数呼び出し後の出力では、外側のbxyが元の値(15、3、4)を保っていることが確認できます。

まとめ

  • ローカル変数: 定義された関数内でのみ有効。スコープ外から参照するとNameErrorが発生する。
  • グローバル変数: プログラム全体がスコープとなり、どこからでもアクセスできる。
  • globalキーワード: 関数内からグローバル変数を変更したい場合に使用する。
  1. Pythonの名前空間とスコープの仕組みをわかりやすく解説

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

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

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