logo

Python のグローバル変数とローカル変数

Python では、変数はデータの保存と管理において重要な役割を果たします。それらの動作とアクセシビリティは、プログラム内のどこで定義されているかによって異なります。この記事では、グローバル変数とローカル変数がどのように機能するか、および一般的なシナリオを例を挙げて説明します。

ローカル変数

ローカル変数は関数内で作成され、関数の実行中にのみ存在します。関数外からはアクセスできません。



Java文字列の文字列

例 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 をグローバルとして宣言し、変更します。

ローカル変数とグローバル変数

比較基準 グローバル変数 ローカル変数
意味関数の外で宣言されている関数内で宣言
一生プログラムの開始時に作成され、終了時に破棄されます関数が呼び出されたときに作成され、関数が返されたときに破棄されます。
データ共有すべての機能で共有共有されません。その機能内でのみ存在します
範囲プログラム内のどこからでもアクセス可能関数内でのみアクセス可能
必要なパラメータパラメータの受け渡しは必要ありません関数内のパラメータまたは代入を通じて作成される可能性があります
ストレージグローバル名前空間で管理 (固定メモリ位置ではない)関数のローカル名前空間 (スタック フレーム) に格納されます。
価値変更はプログラム全体に影響します変更はローカルであり、他の機能には影響しません