Python에서 변수는 데이터를 저장하고 관리하는 데 중요한 역할을 합니다. 해당 동작과 접근성은 프로그램에서 정의된 위치에 따라 달라집니다. 이 문서에서는 전역 및 지역 변수의 작동 방식과 일반적인 시나리오를 예제와 함께 살펴보겠습니다.
지역 변수
지역 변수는 함수 내부에서 생성되며 실행 중에만 존재합니다. 함수 외부에서는 접근할 수 없습니다.
메이븐 저장소
예시 1: 이 코드에서는 함수 내에서 지역 변수를 생성하고 액세스합니다.
Python
def greet(): msg = 'Hello from inside the function!' print(msg) greet()
산출
Hello from inside the function!
설명: 우리는 정의합니다 환영하다() 지역변수로 메시지 그리고 인쇄하세요. msg는 함수 실행 중에만 존재하므로 함수 내에서 액세스됩니다. 부름 환영하다() 메시지를 표시합니다.
실시예 2 : 이 예에서는 함수 내부에 지역 변수를 만든 다음 함수 외부에서 해당 변수에 액세스하려고 시도하여 오류가 발생했습니다.
Pythondef 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
설명: 내부에 재미있는() 에스 'Me too'로 설정된 지역 변수입니다. 그 값을 인쇄합니다. 글로벌 외부 에스 여전히 'I love Geeksforgeeks'이므로 인쇄 중입니다. 에스 그 후에는 전역 값을 보여줍니다.
함수 내에서 전역 변수 수정
기본적으로 전역 변수를 전역으로 선언하지 않고는 함수 내에서 전역 변수를 수정할 수 없습니다. Python을 시도하면 변수를 로컬로 취급하기 때문에 오류가 발생합니다. 전역 변수를 수정하려면 글로벌 키워드 .
전역 없음(오류 발생)
Pythondef fun(): s += ' GFG' # Error: Python thinks s is local print(s) s = 'I love GeeksforGeeks' fun()
산출
UnboundLocalError: 할당 전에 지역 변수 's'가 참조되었습니다.
설명: fun() 내부에서 Python은 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
설명:
- s를 전역으로 선언하면 Python이 전역 범위의 변수를 사용하도록 지시합니다.
- 이 함수는 먼저 'GFG'를 추가한 다음 s를 다시 할당합니다.
- 변경 사항은 함수 외부에서도 유지됩니다.
동일한 이름을 가진 글로벌 및 로컬
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()는 전역을 그대로 두고 로컬을 생성합니다.
- h()는 a를 전역으로 선언하고 수정합니다.
지역 변수와 전역 변수
| 비교 근거 | 전역 변수 | 지역 변수 |
|---|---|---|
| 정의 | 함수 외부에서 선언됨 | 함수 내부에 선언됨 |
| 일생 | 프로그램이 시작될 때 생성되고 종료될 때 소멸됩니다. | 함수가 호출될 때 생성되고 반환될 때 소멸됩니다. |
| 데이터 공유 | 모든 기능에서 공유됨 | 공유되지 않음 그 기능 내에서만 존재함 |
| 범위 | 프로그램의 어느 곳에서나 접근 가능 | 함수 내부에서만 접근 가능 |
| 필요한 매개변수 | 매개변수 전달이 필요하지 않습니다. | 함수 내부의 매개변수나 할당을 통해 생성될 수 있습니다. |
| 저장 | 전역 네임스페이스에서 관리됩니다(고정된 메모리 위치가 아님). | 함수의 로컬 네임스페이스(스택 프레임)에 저장됩니다. |
| 값 | 변경 사항은 전체 프로그램에 영향을 미칩니다 | 변경 사항은 로컬에 적용되며 다른 기능에는 영향을 주지 않습니다. |