グローバル変数と Python の関数から変更する方法

Shikha Chaudhary 2023年1月30日
  1. グローバル変数を使用して、Python の関数から変更する
  2. Python でグローバル変数を作成する
  3. Python の関数からグローバル変数の値を変更する
  4. Python のグローバルキーワード
  5. 複数の関数とグローバル変数
  6. グローバル変数と同じ名前の変数を持つ関数
  7. まとめ
グローバル変数と Python の関数から変更する方法

Python のグローバル変数は、グローバルスコープを持つ変数です。言い換えれば、それらのスコープは、ソースコードの特定の機能またはブロックに限定されません。

グローバル変数を使用して、Python の関数から変更する

まず、変数 x を宣言します。

def avengers():
    x = 10
    print("Gibberish")


avengers()
print(x)

出力:

Gibberish

NameError: name 'x' is not defined

変数 x は関数 avengers の中にあります。これは、この変数のスコープがこの関数のみに制限されることを意味します。

このため、この関数の外部でこの変数にアクセスしようとするとエラーが発生します。

Python でグローバル変数を作成する

変数 x 宣言を関数の外に移動します。

x = 10


def avengers():
    print("Gibberish")


avengers()
print(x)

出力:

Gibberish
10

変数 x は関数の外部で定義されているため、プログラム内のどこでも使用できます。

また、これはグローバル変数です。グローバルスコープで変数を宣言すると、Python でグローバル変数が作成されます。

avengers 関数から global 変数 x にアクセスすることもできます。

x = 10


def avengers():
    print("From avengers:", x)


avengers()
print("Outside avengers:", x)

出力:

From avengers: 10
Outside avengers: 10

Python の関数からグローバル変数の値を変更する

このコードには、10グローバル変数 x があります。次に、関数 change 内で、この変数 x12 を追加します。

関数内の print ステートメントは、更新された x の値を出力する必要があります。

x = 10


def change():
    x = x + 12
    print(x)


change()

出力:

UnboundLocalError: local variable 'x' referenced before assignment

Python では、関数はグローバル変数にのみアクセスして出力できます。グローバル変数への割り当てまたは変更を参照する関数に指示する必要があります。

これを指定しない場合、関数はローカル変数自体に割り当てと変更が行われたと見なします。したがって、このエラーが発生します。

global キーワードを使用して、Python 関数内からグローバル変数の値を変更します。

Python のグローバルキーワード

Python は、スコープ外の変数を変更するための global という名前のキーワードを提供します。変数の値を変更したり、割り当てを行う必要がある場合に使用します。

global キーワードを使用して上記のコードを修正してみましょう。

x = 10


def change():
    global x
    x = x + 12
    print(x)


change()

出力:

22

3 行目の global キーワードを使用して、x をグローバルとして指定する方法をご覧ください。

ここで、関数の外に出力するときの変数 x の値を見てみましょう。

x = 10


def change():
    global x
    x = x + 12
    print(x)


change()
print(x)

出力:

22
22

関数が x10 から 22 に更新したため、ローカルスコープ外の変数にアクセスした場合でも、更新された値が出力として取得されます。

var = "A"


def chocolate():
    print("From chocolate:", var)


def cake():
    global var
    var = var * 2
    print("From cake:", var)


chocolate()
cake()
print("From main:", var)

出力:

From chocolate: A
From cake: AA
From main: AA

この出力から導き出せる最良の推論は、順序が重要です。chocolate 関数は、変更された値ではなく、var の初期値を使用します。

これは、var の値を変更する関数 cake が関数 chocolate の後に呼び出されるためです。最初に cake 関数を呼び出すと、chocolate 関数も var の更新された値を使用します。

var = "A"


def chocolate():
    print("From chocolate:", var)


def cake():
    global var
    var = var * 2
    print("From cake:", var)


cake()
chocolate()
print("From main:", var)

出力:

From cake: AA
From chocolate: AA
From main: AA

これにより、Python の global キーワードを使用する際に従う必要のあるいくつかのルールがわかります。

  • デフォルトでは、関数内の変数はローカルであり、関数外の変数はグローバルです。関数外の変数にはこのキーワードを使用しないでください。
  • Python の関数の外で global キーワードを使用しても、コードに影響はありません。
  • global キーワードの主な用途は、Python で割り当てまたは変更を行うことです。したがって、単に変数にアクセスしたり、変数を出力したりするためには必要ありません。

複数の関数とグローバル変数

ここでは、値が 1 のグローバル変数 s があります。関数 collegeglobal キーワードを使用して s の値を変更する方法をご覧ください。

s = 1


def college():
    global s
    s = s + 5
    print("College students: ", s)
    return s


def school():
    s = college()
    s = s + 10
    print("School students: ", s)
    return s


college()
school()
print("Global students: ", s)

出力:

College students:  6
College students:  11
School students:  21
Global students: 11

まず、関数 college を呼び出します。この関数は、グローバル変数 s を変更し、それを 6 に変更します。

最初の print ステートメントから 6 として出力を取得します。次に、関数を school と呼びます。

関数 college 内で関数 school を再度呼び出します。今回は、関数 college も変数 s の値を変更します。

以前の値 6 を取得してから、11 に更新します。したがって、グローバル変数の最終値は 11 になります。

次に、関数 school がそれを変更しますが、これはグローバル変数で更新されません。更新された s の値を使用し、10 を追加した後に値を出力します。

global キーワードは使用しません。したがって、出力 21。これで、最後のステートメントの出力が 11 である理由がわかります。

これは、グローバル変数 s の更新された値に他なりません。

グローバル変数と同じ名前の変数を持つ関数

グローバル変数と同じ名前の変数が宣言されている関数がある可能性があります。

ここで発生する避けられない質問は、関数がどの変数を使用するかということです。ローカルまたはグローバル?見てみましょう。

# the global variable
a = 5

# function


def music():

    # variable inside function with same name as global variable
    a = 10
    print("Music:", a)


music()
print(a)

出力:

Music: 10
5

このコードにはグローバル変数 a があり、その値は 5 です。関数 music にも a という名前の変数があります。

この変数の値は 10 です。関数内の変数 a の値にアクセスすると、この関数にローカルな変数の値である 10 を取得します。

この関数の外部から a の値にアクセスすると、出力は 5 として取得されます。

これは、ローカル変数が特定のスコープでグローバル変数と同じ名前で存在する場合、グローバル変数よりも優先されることを意味します。

まとめ

このチュートリアルでは、Python のグローバル変数の基本を学びました。それらがローカル変数とどのように異なるか、そして Python でそれらをどのように作成するかを見ました。

関連記事 - Python Scope