工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python globalキーワード完全マスター: 使い方とタイミング

Python globalキーワード完全マスター: 使い方とタイミング

このガイドでは、Pythonのglobalキーワード、そのルール、実用的ユースケース、モジュール間でのグローバル変数管理のベストプラクティスを解説します。


globalキーワードとは?

Pythonでは、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

  1. Python データ型マスター: 実践ガイド
  2. Python 演算子完全マスター: 包括的ガイド
  3. Python pass文完全マスター: 実践ガイド
  4. Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
  5. Python グローバル・ローカル・非ローカル変数を理解する
  6. Python辞書完全ガイド:作成、操作、高度なテクニック
  7. Pythonイテレータ完全ガイド:仕組みと自作方法
  8. Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
  9. Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
  10. Python 概要:高水準、読みやすい、インタラクティブ、オブジェクト指向
  11. Python 変数とデータ型:型の理解と活用