Python globalキーワード完全マスター: 使い方とタイミング
Python globalキーワード完全マスター: 使い方とタイミング
このガイドでは、Pythonのglobalキーワード、そのルール、実用的ユースケース、モジュール間でのグローバル変数管理のベストプラクティスを解説します。
globalキーワードとは?
Pythonでは、globalキーワードを使って、関数内の変数がモジュールレベル変数を参照することを宣言します。関数が自身のスコープ外に存在する変数を読み書きする必要があるときに不可欠です。
global使用のルール
- 関数内で作成される変数はデフォルトでローカル。
- モジュールレベルで定義された変数は自動的にグローバル;読み取りのみなら
global不要。 - 関数内でモジュールレベル変数に代入する意図がある場合
globalを使用。 - 関数外で
globalを置いても効果なし。
globalの実践的使用
以下の例は落とし穴と正しいアプローチを両方示します。
例1: 関数内からグローバル変数にアクセス
c = 1 # グローバル変数
def add():
print(c)
add()
出力:
1
ここではcは読み取りのみで、add()内で代入がないため正常に読めます。
例2: globalなしでグローバル変数変更を試みる
c = 1 # グローバル変数
def add():
c = c + 2 # cを変更しようとする
print(c)
add()
出力:
UnboundLocalError: local variable 'c' referenced before assignment
エラー発生理由: Pythonはcを代入前に参照される新しいローカル変数として扱うため。
例3: globalを使ってグローバル変数を変更
c = 0 # グローバル変数
def add():
global c
c = c + 2
print("Inside add():", c)
add()
print("In main:", c)
出力:
Inside add(): 2 In main: 2
global c宣言により、関数がモジュールレベルcを更新し、変更が関数外部からも見えます。
Pythonモジュール間でのグローバル変数共有
大規模アプリでは、設定を専用モジュール(例: config.py)に集約するのが一般的。他モジュールがインポートして変更可能で、プログラム全体で一貫した状態を維持。
例4: クロスモジュール グローバル変数
config.pyを作成:
a = 0
b = "empty"
update.pyでグローバルを変更:
import config
config.a = 10
config.b = "alphabet"
main.pyで変更確認:
import config
import update
print(config.a)
print(config.b)
出力:
10 alphabet
このパターンで共有状態を一箇所に保ちつつ、他モジュールからの制御された更新を可能にします。
ネスト関数でのglobal使用
ネスト関数が外側関数のローカル変数を変更する必要がある場合、globalキーワードを適用して真のグローバル変数を作れます。
例5: ネスト関数でのグローバル変数
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar:", x)
print("Calling bar now")
bar()
print("After calling bar:", x)
foo()
print("x in main:", x)
出力:
Before calling bar: 20 Calling bar now After calling bar: 20 x in main: 25
foo()内ではxはローカル変数のまま。ネストしたbar()がxをグローバル宣言するため、代入はモジュールレベルxに影響し、foo()終了後にも見えます。
globalは便利ですが、グローバル状態を変異させるより、関数が新しい値を返す設計にするのが一般的にベスト。これによりコードが明確になりテストしやすくなります。詳細な言語ルールは公式Pythonドキュメントのglobal文を参照。)
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python グローバル・ローカル・非ローカル変数を理解する
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Python 概要:高水準、読みやすい、インタラクティブ、オブジェクト指向
- Python 変数とデータ型:型の理解と活用