변수의 제한 범위를 지역변수와 전역변수로 나눈다.
함수의 안에 있는 변수를 지역변수 바깥에 있는 변수를 전역변수로 구분한다.
아래 예제를 통해서 알아본다.
apple = 15
def func1 ():
print("Local func1 apple :",apple)
def func2 ():
global apple
print("Local func2 apple :",apple)
def func3 ():
apple = 24
print("Local func3 apple :",apple)
def func4 ():
global apple
apple = 72
print("Local func4 apple :",apple)
def func5 ():
print("Local func5 apple :",apple)
func1()
func2()
func3()
func4()
# global apple
# apple = 'apple'
print("global main :", apple)
func1()
func2()
func3()
func4()
print("global main :", apple)
apple = 'Tasty one'
func5()
func1 부터 fun5 까지 함수가 있다. apple 이 유일한 전역변수이다.
* 1번은 전역변수를 사용한다. 전역변수를 사용할 수 있지만 수정은 불가능하다. 그냥 읽기만 할 수 있다.
apple = 15
def func1 ():
print("Local func1 apple :",apple)
* 2번은 global 키워드로 전역변수를 사용하겠다고 명시한다. 1번과 다르게 global 변수를 수정하는 것이 가능하다.
apple = 15
def func2 ():
global apple
print("Local func2 apple :",apple)
* 3번은 지역변수다. 지역변수를 먼저 설정해서 사용했기 때문에 24가 출력된다.
apple = 15
def func3 ():
apple = 24
print("Local func3 apple :",apple)
* 4번은 전역변수를 설정하고 값을 수정했다. apple은 72로 수정되고 함수가 종료되도 전역변수의 값은 변한다.
apple = 15
def func4 ():
global apple
apple = 72
print("Local func4 apple :",apple)
* 5번은 함수에서 다른 함수를 호출한다. 4번 함수를 호출하면서 다시 전역변수가 변경되는 것을 볼 수 있다.
def func5 ():
print("Local func5 apple :",apple)
func1()
func2()
func3()
func4()
# global apple
# apple = 'apple'
print("global main :", apple)
func1()
func2()
func3()
func4()
print("global main :", apple)
apple = 'Tasty one'
func5()
지역변수와 이름이 같은 전역변수를 쓰는 것은 권장되지 않는다. 또 함수 지역에서 전역변수를 사용하는 것은 권장되지 않는다. 함수내에서 다른 함수를 부를 때 전역변수가 바뀌기 때문에 오류 발생시 찾아내기 어렵다. 특히 코드가 복잡해질 수록 전역변수의 디버그는 어려워진다. 함수에는 인수를 매개변수에 넘겨주는 방식이 좋다.
간단한 프로그램을 작성할 때 전역변수의 지역 사용을 고려해 볼 수 있다. 하나의 값의 여러 함수에서 사용되야 하는데 매개 변수를 여러개 만드는 것을 원하지 않을 때 고려해 볼 수 있다.
지역에서 전역변수 한개를 쓰던 열개를 쓰건 어쨋든 타인이 봤을 때 이해가 어려운 것은 사실이다. 그러니 신중할 필요가 있다.