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  

설명: 내부에 재미있는() 에스 'Me too'로 설정된 지역 변수입니다. 그 값을 인쇄합니다. 글로벌 외부 에스 여전히 'I love Geeksforgeeks'이므로 인쇄 중입니다. 에스 그 후에는 전역 값을 보여줍니다.

함수 내에서 전역 변수 수정

기본적으로 전역 변수를 전역으로 선언하지 않고는 함수 내에서 전역 변수를 수정할 수 없습니다. 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가 로컬이라고 가정합니다. 하지만 해당 줄 앞에는 로컬이 없으므로 오류가 발생합니다.

글로벌 사용 (올바르게 작동)

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  

설명:

  • s를 전역으로 선언하면 Python이 전역 범위의 변수를 사용하도록 지시합니다.
  • 이 함수는 먼저 'GFG'를 추가한 다음 s를 다시 할당합니다.
  • 변경 사항은 함수 외부에서도 유지됩니다.

동일한 이름을 가진 글로벌 및 로컬

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()는 전역을 그대로 두고 로컬을 생성합니다.
  • h()는 a를 전역으로 선언하고 수정합니다.

지역 변수와 전역 변수

비교 근거 전역 변수 지역 변수
정의 함수 외부에서 선언됨 함수 내부에 선언됨
일생 프로그램이 시작될 때 생성되고 종료될 때 소멸됩니다. 함수가 호출될 때 생성되고 반환될 때 소멸됩니다.
데이터 공유 모든 기능에서 공유됨 공유되지 않음 그 기능 내에서만 존재함
범위 프로그램의 어느 곳에서나 접근 가능 함수 내부에서만 접근 가능
필요한 매개변수 매개변수 전달이 필요하지 않습니다. 함수 내부의 매개변수나 할당을 통해 생성될 수 있습니다.
저장 전역 네임스페이스에서 관리됩니다(고정된 메모리 위치가 아님). 함수의 로컬 네임스페이스(스택 프레임)에 저장됩니다.
변경 사항은 전체 프로그램에 영향을 미칩니다 변경 사항은 로컬에 적용되며 다른 기능에는 영향을 주지 않습니다.