Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのグローバル変数とローカル変数の違いを徹底解説

Pythonでは、関数の本体内で定義された変数はローカルスコープを持ち、関数の外で定義された変数はグローバルスコープを持ちます。

これはつまり、ローカル変数には宣言された関数の中からのみアクセスできる一方で、グローバル変数はプログラム全体のあらゆる場所(すべての関数から)アクセスできるということを意味します。また、関数を呼び出すと、その内部で宣言された変数がスコープに読み込まれます。

サンプルコード

#!/usr/bin/python
total = 0  # これはグローバル変数

# 関数の定義
def sum(arg1, arg2):
    # 2つの引数を加算して返します
    total = arg1 + arg2  # ここでの total はローカル変数
    print("関数内のローカル total :", total)
    return total

# sum関数を呼び出します
sum(10, 20)
print("関数外のグローバル total :", total)

実行結果

上記のコードを実行すると、次のような結果が出力されます。

関数内のローカル total : 30
関数外のグローバル total : 0

なぜこのような結果になるのか?

この実行結果には重要なポイントがあります。関数 sum() の内部での代入 total = arg1 + arg2 は、同じ名前を持つ別のローカル変数を作成しているだけであり、関数の外で定義されたグローバル変数 total は一切書き換えられていません。そのため、関数の外で total を表示しても、初期値のままの 0 が出力されるのです。

globalキーワードで関数内からグローバル変数を変更する

もし関数の中からグローバル変数そのものを変更したい場合は、global キーワードを使用します。

#!/usr/bin/python
total = 0

def sum(arg1, arg2):
    global total  # グローバル変数であることを明示
    total = arg1 + arg2
    print("関数内の total :", total)

sum(10, 20)
print("関数外のグローバル total :", total)

このコードを実行すると、関数内の変更がグローバル変数にも反映され、次のように出力されます。

関数内の total : 30
関数外のグローバル total : 30

ただし、グローバル変数の乱用はプログラムの可読性や保守性を損なう原因となるため、実際の開発では使用を必要最小限にとどめることが推奨されています。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print