변수의 제한 범위를 지역변수와 전역변수로 나눈다.

 

함수의 안에 있는 변수를 지역변수 바깥에 있는 변수를 전역변수로 구분한다.

 

아래 예제를 통해서 알아본다.

 



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()

지역변수와 이름이 같은 전역변수를 쓰는 것은 권장되지 않는다. 또 함수 지역에서 전역변수를 사용하는 것은 권장되지 않는다. 함수내에서 다른 함수를 부를 때 전역변수가 바뀌기 때문에 오류 발생시 찾아내기 어렵다. 특히 코드가 복잡해질 수록 전역변수의 디버그는 어려워진다. 함수에는 인수를 매개변수에 넘겨주는 방식이 좋다.

 

간단한 프로그램을 작성할 때 전역변수의 지역 사용을 고려해 볼 수 있다. 하나의 값의 여러 함수에서 사용되야 하는데 매개 변수를 여러개 만드는 것을 원하지 않을 때 고려해 볼 수 있다.

 

지역에서 전역변수 한개를 쓰던 열개를 쓰건 어쨋든 타인이 봤을 때 이해가 어려운 것은 사실이다. 그러니 신중할 필요가 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band