반응형

파이썬 전역 변수와 지역변수

  • 변수의 유효 범위
  • 전역 변수란?
  • 지역 변수란?
  • global 사용법

 

변수의 유효 범위

파이썬에서는 변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위가 달라진다.
이것을 변수의 유효 범위(variable scope)라고 부른다.

예를들어, 함수 내부에서 선언된 변수는 해당 함수 내부에서만 사용할 수 있으며, 함수 밖에서는 사용할 수 없다.

파이썬에서는 변수의 유효 범위에 따라 다음과 같이 나눌 수 있다.

1. 지역 변수(local variable)
2. 전역 변수(global variable)

지역 변수(local variable)

파이썬에서 지역 변수(local variable)란 함수 내에서 선언된 변수를 의미한다.
이렇게 함수 내에서 선언된 지역 변수는 일반적으로 함수 내에서만 사용할 수 있다.

[예제]

def func():
    local_var = "지역 변수"
    print(local_var)    

func()
# print(local_var)

[실행 결과]

지역 변수

위의 예제에서는 func() 함수 내부에서 local_var이라는 이름의 지역 변수를 선언하고 사용한다.
만약 7번 라인의 주석 처리를 해제하고 함수 밖에서 함수 내에 선언된 지역 변수에 접근하려고 하면 Error가 발생한다.

함수 내부에서 선언된 지역 변수는 함수의 호출이 끝남과 동시에 소멸되므로, 함수 밖에서 접근하려고 하면 선언되지 않은 변수에 접근하는 것으로 인식하여 오류가 발생하는 것이다. 함수의 매개변수 또한 함수 내부에서 정의되는 지역 변수로 취급된다.


전역 변수(global variable)

파이썬에서 전역 변수(global variable)란 함수 외부에서 선언된 변수를 의미한다.
이렇게 함수 외부에서 선언된 전역 변수는 함수 외부에서는 당연히 접근할 수 있고, 함수 내에서도 global 키워드로 재선언하면 접근할 수 있게 된다.

[예제]

def func():
    global global_var
    local_var = "지역 변수"
    print(local_var)
    print(global_var)    

 
global_var = "전역 변수"
func()
print(global_var)

[실행 결과]

지역 변수
전역 변수
전역 변수

위 예제의 5번 라인처럼 함수 내부에서 전역 변수를 사용하기 위해서는 반드시 2번 라인처럼 global 키워드를 사용하여 해당 변수를 재선언해야 한다.

만약 함수 외부에서 선언된 전역 변수와 함수 내부에서 선언된 지역 변수의 이름이 가은 경우에는 다음 예제와 같이 global 키워드를 사용하지 않으면 전혀 별개의 변수로 취급되므로 주의해야 한다.

[예제]

def func():
    var = "지역 변수"
    print(var)    

 
var = "전역 변수"
print(var)
func()
print(var)

[실행 결과]

전역 변수
지역 변수
전역 변수

위 예제의 2번 라인은 전역 변수 var에 대입 연산을 하는 것이 아니라 새로운 지역 변수인 var를 선언하는 것이다.
따라서 마지막 print문을 통해 출력 결과를 보면 전역 변수 var의 값이 변하지 않았음을 확인할 수 있다.

다음 예제의 3번 라인처럼 global 키워드를 사용해야만 지역 변수의 선언이 아닌 전역 변수의 값을 변경하는 구문으로 동작할 수 있다.

[예제]

def func():
	global var
    var = "지역 변수"
    print(var)
    
var = "전역 변수"
print(var)
func()
print(var)

[실행 결과]

전역 변수
지역 변수
지역 변수

10번 라인에서 전역 변수 var의 출력 결과가 "전역 변수"에서 "지역 변수"로 변경된 것을 확인할 수 있다.

※ 위의 예제처럼 전역 변수의 값을 함수 내부에서 변경하는 것은 그리 좋은 방법이 아니다. 이러한 행위는 해당 전역 변수를 사용하는 다른 함수의 동작을 의도치 않게 바꾸는 결과를 초래할 수 있으므로, 변수의 유효 범위를 이해하는 용도로 사용하자.

변수의 범위, 전역 변수, 지역 변수

 

 

반응형