Python グローバル・ローカル・非ローカル変数を理解する
Python グローバル・ローカル・非ローカル変数を理解する
Pythonにおけるグローバル、ローカル、非ローカル変数の使い方をマスターし、それぞれをいつ適用すべきかを知って、クリーンで保守しやすいコードを書きます。
動画: Pythonローカルとグローバル変数
グローバル変数
Pythonでは、関数の外部、モジュールレベルで宣言された変数はグローバル変数です。モジュール内のどこからでも読み取れますが、関数内で変更するにはglobalキーワードで宣言する必要があります。
例: グローバル変数の作成と読み取り
x = "global"
def foo():
print("x inside:", x)
foo()
print("x outside:", x)
出力
x inside: global x outside: global
global宣言なしでxを再代入しようとするとUnboundLocalError:
x = "global"
def foo():
x = x * 2
print(x)
foo()
出力
UnboundLocalError: local variable 'x' referenced before assignment
関数内でグローバル変数を変更するにはglobalキーワードを使用:
x = "global"
def foo():
global x
x = x * 2
print(x)
foo()
出力
globalglobal
ローカル変数
ローカル変数は関数本体内で定義され、その関数実行中のみ存在。関数外からアクセスできません。
例: スコープ外からローカル変数にアクセス
def foo():
y = "local"
foo()
print(y)
出力
NameError: name 'y' is not defined
ローカル変数の正しい定義と使用:
def foo():
y = "local"
print(y)
foo()
出力
local
グローバルとローカル変数の併用
同じモジュールで両スコープを使うのは一般的。globalキーワードで変数がモジュールレベルのインスタンスを参照することを保証。
x = "global "
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
出力
global global local
ローカル変数がグローバルと同名の場合、それらは独立:
x = 5
def foo():
x = 10
print("local x:", x)
foo()
print("global x:", x)
出力
local x: 10 global x: 5
非ローカル変数
ネスト関数は、nonlocalキーワードで外側(グローバルではない)スコープの変数にアクセス・変更できます。
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
outer()
出力
inner: nonlocal outer: nonlocal
注意: 内側関数で非ローカル変数を更新すると、外側関数のスコープの変数が更新されます。
Python
- C言語変数・定数・リテラル完全ガイド
- Python キーワードと識別子: 予約語と命名規則をマスター
- Python 文・インデント・コメント: 明確なガイド
- Python 変数・定数・リテラル: 包括的ガイド
- Python 型変換とキャスト: 包括的ガイド
- Python I/Oとモジュールインポート完全マスター: 実践ガイド
- Python globalキーワード完全マスター: 使い方とタイミング
- Pythonにおける数値、型変換、数学のマスター
- Pythonディレクトリ・ファイル操作マスター:作成、移動、一覧、リネーム、削除
- Pythonエラーと組み込み例外をマスターする
- Python type()とisinstance()の理解:実例付き解説