Python では、変数はデータの保存と管理において重要な役割を果たします。それらの動作とアクセシビリティは、プログラム内のどこで定義されているかによって異なります。この記事では、グローバル変数とローカル変数がどのように機能するか、および一般的なシナリオを例を挙げて説明します。
ローカル変数
ローカル変数は関数内で作成され、関数の実行中にのみ存在します。関数外からはアクセスできません。
Java文字列の文字列
例 1: このコードでは、関数内でローカル変数を作成してアクセスしています。
Pythondef 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」が定義されていません
説明: メッセージ 内部のローカル変数です 挨拶する() そしてそこにのみアクセスできます。これを外部に出力すると、グローバルに存在しないためエラーが発生します。
グローバル変数
グローバル変数はすべての関数の外側で宣言され、関数内を含むプログラム内のどこからでもアクセスできます。
この例では、グローバル変数を作成し、関数の内部と外部の両方でその変数にアクセスしています。
Pythonmsg = '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 は自動的にグローバル スコープでその変数を探します。ただし、ローカル変数がグローバル変数と同じ名前を持つ場合、その関数内でグローバル変数がシャドウされます。
ローカル変数とグローバル変数の使用
変数がグローバルとローカルの両方で同じ名前で定義されている場合、ローカル変数は関数内でグローバル変数をシャドウします。変数を明示的にグローバルとして宣言しない限り、ローカル変数を変更してもグローバル変数には影響しません。
Pythondef 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 は変数をローカルとして扱うため、実行しようとするとエラーが発生します。グローバル変数を変更するには、 グローバルキーワード 。
グローバルなし (エラーが発生します)
Pythondef fun(): s += ' GFG' # Error: Python thinks s is local print(s) s = 'I love GeeksforGeeks' fun()
出力
UnboundLocalError: 割り当て前にローカル変数 's' が参照されました
説明: fun() の内部では、Python は s を変更しようとしているため、 s がローカルであると想定します。ただし、その行の前にローカル s が存在しないため、エラーが発生します。
グローバルあり (正しく動作します)
Pythons = '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」を追加し、次に を再割り当てします。
- 変更は関数の外部でも保持されます。
同じ名前のグローバルとローカル
Pythona = 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 をグローバルとして宣言し、変更します。
ローカル変数とグローバル変数
| 比較基準 | グローバル変数 | ローカル変数 |
|---|---|---|
| 意味 | 関数の外で宣言されている | 関数内で宣言 |
| 一生 | プログラムの開始時に作成され、終了時に破棄されます | 関数が呼び出されたときに作成され、関数が返されたときに破棄されます。 |
| データ共有 | すべての機能で共有 | 共有されません。その機能内でのみ存在します |
| 範囲 | プログラム内のどこからでもアクセス可能 | 関数内でのみアクセス可能 |
| 必要なパラメータ | パラメータの受け渡しは必要ありません | 関数内のパラメータまたは代入を通じて作成される可能性があります |
| ストレージ | グローバル名前空間で管理 (固定メモリ位置ではない) | 関数のローカル名前空間 (スタック フレーム) に格納されます。 |
| 価値 | 変更はプログラム全体に影響します | 変更はローカルであり、他の機能には影響しません |