言語バージョン 3.9.1

公開日 2021年2月1日 JST

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

global

このページでは豊富な例を用いてPythonのglobal文の使い方を学ぶことができます。

global文は指定した変数をグローバル変数として扱うように宣言します。

global文を使用すると、たとえば関数ブロック内からグローバル変数の値を変更することができ、コードに柔軟性をもたらします。 しかし、global文の乱用はコードの見通しを悪くするので、必要最低限の使用に留めることが推奨されます。

TL;DR

基本

# グローバル変数を変更できない場合
val1 = 'python'

def func1():
    # このままだとfunc1内のローカル変数val1への代入となる
    val1 = 'JavaScript'
    print(val1)

func1()
==> JavaScript
# グローバル変数の表示
print(val1)
==> python





# グローバル変数を変更する場合
val2 = 'python'

def func2():
    # global文を使用してglobal変数へのアクセスを宣言する
    global val2
    val2 = 'JavaScript'
    print(val2)

func2()
==> JavaScript
# グローバル変数の表示
print(val2)
==> JavaScript





# global文で指定する名前は、同じブロック内でglobal文より前で使用できない
val3 = 'python'

def func3():
    val3 = 'variables'
    global val3
    val3 = 'JavaScript'
    print(val3)
==> SyntaxError: name 'val3' is assigned to before global declaration

複数のグローバル変数の指定

# 複数のグローバル変数を指定する場合
value1 = 'python'
value2 = 'PYTHON'

def func1():
    global value1, value2
    # 変更前のグローバル変数にアクセス
    print(value1, value2)
    value1 = 'func1'
    value2 = 'FUNC1'

func1()
==> python PYTHON
# 変更後のグローバル変数にアクセス
print(value1, value2)
==> func1 FUNC1

解説

基本

以下のコード例のように、Pythonでは関数内で通常通り代入された変数はローカル変数とみなされ、外側のブロックに定義されたグローバル変数へ影響を及ぼしません。
しかし、global文でグローバル変数である変数名を指定すると、その変数は対象のブロック内でグローバル変数として扱うことができるようになります。
一連の処理の中でglobal文に指定された変数が無い場合は、新たなグローバル変数を定義したことになります。

注意点として、global文に指定した変数名は同一ブロック内でglobal文より前に使用できない点が挙げられます。

global文の使用により、コードに柔軟性が生まれる側面もあります。 しかし、global文の多用はコードの可読性を著しく下げてしまう可能性もあります。 そのため、global文の使用を必要最小限とすることが一般的には推奨されます。

# グローバル変数を変更できない場合
val1 = 'global'

def func1():
    val1 = 'func1'
    print(val1)

func1()
==> func1
# グローバル変数の表示
print(val1)
==> global





# グローバル変数を変更する場合
val2 = 'global'

def func2():
    # global文を使用
    global val2
    val2 = 'func2'
    print(val2)

func2()
==> func2
# グローバル変数の表示
print(val2)
==> func2





# global文の誤った使用方法
val3 = 'global'

def func3():
    val3 = 'local'
    global val3
    val3 = 'func3'
    print(val3)
==> SyntaxError: name 'val3' is assigned to before global declaration

複数のグローバル変数の指定

複数のグローバル変数を特定ブロック内で一度に扱うこともできます。
その場合、複数行にglobal文を宣言するか、または,(カンマ)区切りで1つのglobal文に複数の変数名を列挙してください。

# 複数のグローバル変数を指定する場合
val_1 = 'global'
val_2 = 'GLOBAL'

def func1():
    global val_1, val_2
    # 変更前のグローバル変数
    print(val_1, val_2)
    val_1 = 'func1'
    val_2 = 'FUNC1'

func1()
==> global GLOBAL
# 変更後のグローバル変数
print(val_1, val_2)
==> func1 FUNC1

1次情報

pass文 - 単純文 (simple statement) - Pythonドキュメント

Python のローカルとグローバル変数のルールは何ですか? - プログラミング FAQ - Pythonドキュメント