Python 関数と変数のスコープ

ここでは Python 関数と変数のスコープについてご説明します。

Python のグローバル変数

プログラミングで「グローバル変数」というのは、プログラムのどこからでも利用できる変数のことです。

次のようにプログラムのメインの部分で定義した変数はグローバル変数で、どこからでも利用できます。

value = 100

def func():
    print(f"value = {value} - in func()")

func()
print(f"value = {value} - after func()")

実行結果は次のようになります。 value はグローバル変数で、func() 関数内でも value の値が利用できています。

value = 100 - in func()
value = 100 - after func()

Python のローカル変数

プログラミングで「ローカル変数」というのは、プログラムの一部でしか利用できない変数のことです。

次のように関数内で定義した変数はローカル変数で、その関数内でしか利用できません。

def func():
    value = 100
    print(f"value = {value} - in func()")

func()
print(f"value = {value} - after func()")

実行結果は次のようになり、value はローカル変数なので、関数の外で value を利用とするとエラーになります。

value = 100 - in func()
Traceback (most recent call last):
  File "/Users/user1/Src/Python/hello.py", line 7, in 
    print(f"value = {value} - after func()")
NameError: name 'value' is not defined

グローバル変数と同じ名前の変数を関数内で定義すると、その変数はグローバル変数とは別のローカル変数として扱われます。

その場合、関数内では同じ名前のグローバル変数は利用できなくなり、関数内で変数の値を変更してもグローバル変数に影響は与えません。

value = 200

def func():
    value = 100
    print(f"value = {value} - in func()")

print(f"value = {value} - before func()")
func()
print(f"value = {value} - after func()")

実行結果は次のようになり、関数内で value に別の値を代入しても、関数外では value の値は変更されていません。

value = 200 - before func()
value = 100 - in func()
value = 200 - after func()

Python 関数内でグローバル変数を定義・変更する

Pythno の関数内で変数を普通に定義するとローカル変数になってしまいますが、global 文を使うことによってグローバル変数として定義することができます。

def func():
    global value
    value = 100
    print(f"value = {value} - in func()")

func()
print(f"value = {value} - after func()")

実行結果は次のようになり、関数内で定義した value 変数が関数外でも利用できていますね。

value = 100 - in func()
value = 100 - after func()

グローバル変数を関数内で変更したい時も global 文を使って行うことができます。

value = 200

def func():
    global value
    print(f"value = {value} - in func() 1")
    value = 100
    print(f"value = {value} - in func() 2")

print(f"value = {value} - before func()")
func()
print(f"value = {value} - after func()")

実行結果は次のようになります。 関数内でグローバル変数にアクセスでき、値の変更もできていますね。

value = 200 - before func()
value = 200 - in func() 1
value = 100 - in func() 2
value = 100 - after func())

以上、Python 関数と変数のスコープについてご説明しました。

© 2024 やさしい Python 入門