파이썬 변수의 유효 범위
🚀
알고리즘 문제를 풀다보니 가끔 든 생각이 있다… 전역 변수, 지역 변수 오케이! 근데 함수내부에 함수가 있을 때 바깥 함수의 변수의 변수를 사용하는 방법은 매개변수로 전달하는거 밖에 없나…??
변수의 유효범위 🚧
- 파이썬에서는 변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위가 달라진다. 이를 변수의 유효범위라고 한다.
- 종류에는 지역 변수(local variable), 전역 변수(global variable)이 있다.
1️⃣ 지역변수(local variable)
- 일반적으로 함수 내에서 선언 된 변수
def test():
test_val = '지역 변수'
print(test_val)
test() # '지역 변수' 출력
print(test_val)
# NameError: name 'test_val' is not defined
-
함수의 호출이 끝남과 동시에 소멸되므로, 함수 밖에서 접근하려고 하면 선언되지 않은 변수에 접근하는 것으로 인식하여 오류가 발생
-
함수의 매개변수 또한 함수 내부에서 정의되는 지역 변수
2️⃣ 전역 변수(global variable)
- 함수 외부에서 선언된 변수
global_val = '전역 변수'
def test():
print(global_val)
test() # '전역 변수' 출력
print(global_val) # '전역 변수' 출력
- 전역 변수와 지역 변수의 이름이 같은 경우에는 둘은 전혀 별개의 변수
global_val = '전역 변수'
def test():
global_val = '지역 변수'
print(global_val)
test() # '지역 변수' 출력
print(global_val) # '전역 변수' 출력
- global 키워드는 전역 변수의 변수를 함수 내부에서 사용하여 값을 바꾸고 싶을 때 사용
- 좋은 방법은 아님 전역 변수를 사용하는 다른 함수의 동작을 의도치 않게 바꾸는 결과를 초래할 수 있으므로
global_val = '전역 변수'
def test():
global global_var
global_val = '지역 변수'
print(global_val)
test() # '지역 변수' 출력
print(global_val) # '지역 변수' 출력
-
전역 변수가 없는데 global로 전역 변수를 만드는 경우
-
global 변수 선언
def test():
global gloval_val
gloval_val = '전역 변수'
print(global_val)
test() # '전역 변수' 출력
print(global_val) # '전역 변수' 출력
- 지역 변수를 불러오기 위해서는 nonlocal 키워드를 사용
def test():
test_val = '지역 변수'
def test2():
nonlocal test_val
print(test_val)
test2()
test() # '지역 변수' 출력
댓글남기기