Python のグローバル変数とローカル変数
Python では、変数はデータの保存と管理において重要な役割を果たします。それらの動作とアクセシビリティは、プログラム内のどこで定義されているかによって異なります。この記事では、グローバル変数とローカル変数がどのように機能するか、および一般的なシナリオを例を挙げて説明します。
ローカル変数
ローカル変数は関数内で作成され、関数の実行中にのみ存在します。関数外からはアクセスできません。
例 1: このコードでは、関数内でローカル変数を作成してアクセスしています。
Python def greet (): msg = 'Hello from inside the function!' print ( msg ) greet ()
出力
Hello from inside the function!
説明: 私たちは定義します 挨拶する() ローカル変数を使って メッセージ そしてそれを印刷します。 msg は関数の実行中にのみ存在するため、関数内でアクセスされます。電話をかける 挨拶する() というメッセージが表示されます。
例 2 : この例では、関数内でローカル変数を作成し、関数外でその変数にアクセスしようとしているため、エラーが発生します。
Python def greet (): msg = 'Hello!' print ( 'Inside function:' msg ) greet () print ( 'Outside function:' msg )
出力
トレースバック (最後の呼び出し):
ファイル「/home/guest/sandbox/Solution.py」の 6 行目
print('関数外:' msg)
NameError: 名前「msg」が定義されていません
説明: メッセージ 内部のローカル変数です 挨拶する() そしてそこにのみアクセスできます。これを外部に出力すると、グローバルに存在しないためエラーが発生します。
グローバル変数
グローバル変数はすべての関数の外側で宣言され、関数内を含むプログラム内のどこからでもアクセスできます。
この例では、グローバル変数を作成し、関数の内部と外部の両方でその変数にアクセスしています。
Python msg = 'Python is awesome!' def display (): print ( 'Inside function:' msg ) display () print ( 'Outside function:' msg )
出力
Inside function: Python is awesome! Outside function: Python is awesome!
説明: メッセージ 内部と外部の両方からアクセスできるグローバル変数です。 画面() 関数。電話をかける 画面() グローバルを印刷します メッセージ そして印刷 メッセージ 関数の外では期待どおりに動作します。
注記: 変数が関数内 (ローカル スコープ) で見つからない場合、Python は自動的にグローバル スコープでその変数を探します。ただし、ローカル変数がグローバル変数と同じ名前を持つ場合、その関数内でグローバル変数がシャドウされます。
ローカル変数とグローバル変数の使用
変数がグローバルとローカルの両方で同じ名前で定義されている場合、ローカル変数は関数内でグローバル変数をシャドウします。変数を明示的にグローバルとして宣言しない限り、ローカル変数を変更してもグローバル変数には影響しません。
Python def fun (): s = 'Me too.' print ( s ) s = 'I love Geeksforgeeks' fun () print ( s )
出力
Me too. I love Geeksforgeeks
説明: 内部 楽しい() s 「Me too」に設定されたローカル変数です。そしてその値を出力します。グローバルの外側 s 「I love Geeksforgeeks」のままなので印刷 s その後はグローバル値が表示されます。
関数内のグローバル変数の変更
デフォルトでは、グローバルとして宣言せずに関数内のグローバル変数を変更することはできません。 Python は変数をローカルとして扱うため、実行しようとするとエラーが発生します。グローバル変数を変更するには、 グローバルキーワード 。
グローバルなし (エラーが発生します)
Python def fun (): s += ' GFG' # Error: Python thinks s is local print ( s ) s = 'I love GeeksforGeeks' fun ()
出力
UnboundLocalError: 割り当て前にローカル変数 's' が参照されました
説明: fun() の内部では、Python は s を変更しようとしているため、 s がローカルであると想定します。ただし、その行の前にローカル s が存在しないため、エラーが発生します。
グローバルあり (正しく動作します)
Python s = 'Python is great!' def fun (): global s s += ' GFG' # Modify global variable print ( s ) s = 'Look for GeeksforGeeks Python Section' # Reassign global print ( s ) fun () print ( s )
出力
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
説明:
- をグローバルとして宣言すると、Python はグローバル スコープの変数を使用するように指示されます。
- この関数は最初に「GFG」を追加し、次に を再割り当てします。
- 変更は関数の外部でも保持されます。
同じ名前のグローバルとローカル
Python a = 1 # Global variable def f (): print ( 'f():' a ) # Uses global a def g (): a = 2 # Local shadows global print ( 'g():' a ) def h (): global a a = 3 # Modifies global a print ( 'h():' a ) print ( 'global:' a ) f () print ( 'global:' a ) g () print ( 'global:' a ) h () print ( 'global:' a )
出力
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
説明:
- f() は、グローバル a を変更せずに出力します。
- g() はローカル a を作成し、グローバルなものはそのままにしておきます。
- h() は a をグローバルとして宣言し、変更します。
ローカル変数とグローバル変数
| 比較基準 | グローバル変数 | ローカル変数 |
|---|---|---|
| 意味 | 関数の外で宣言されている | 関数内で宣言 |
| 一生 | プログラムの開始時に作成され、終了時に破棄されます | 関数が呼び出されたときに作成され、関数が返されたときに破棄されます。 |
| データ共有 | すべての機能で共有 | 共有されません。その機能内でのみ存在します |
| 範囲 | プログラム内のどこからでもアクセス可能 | 関数内でのみアクセス可能 |
| 必要なパラメータ | パラメータの受け渡しは必要ありません | 関数内のパラメータまたは代入を通じて作成される可能性があります |
| ストレージ | グローバル名前空間で管理 (固定メモリ位置ではない) | 関数のローカル名前空間 (スタック フレーム) に格納されます。 |
| 価値 | 変更はプログラム全体に影響します | 変更はローカルであり、他の機能には影響しません |