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

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

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