여러분이 학교에서 가장 높은 시험 점수를 받은 사람이라고 칩시다.
>>> highest = 'me'
아이들에게 물어본다면 누가 가장 높은 점수를 받았다고 할까요? 당연히...
>>> highest 'me'
그런데 자신의 반에서 가장 높은 점수를 받은 아이가 있다고 합니다.
>>> def class(): ... highest = 'James' ... print('highest =', James) ... >>> ban() highest = James
그러나 여전히 가장 높은 점수는 제가 가지고 있습니다.
>>> highest 'me'
class() 함수 안에서 highest = 'James'이라고 하면 highest이란 변수를 새로 만드는 거구요, 기존의 highest에는 영향을 미치지 않습니다. 그리고, class 함수가 끝날 땐 그 함수 내에서 만들었던 변수들은 모두 없어지는 거죠.
이와 같이 함수 안에서 만들어진 변수를 지역변수라고 하고, 함수 밖에서 만들어진 변수를 전역변수라고 합니다. 지역변수는 함수가 호출되면 만들어져서, 함수의 실행이 끝날 때 함께 없어지는 반면, 전역변수는 함수와는 관계없이 항상 꿋꿋이 지구를 지킨답니다. 그래서 영어로 전역변수를 global이라는 말로 표현하지용…
지역변수를 함수 밖에서 한번 불러볼까요?
>>> def d_is_10(): ... d = 10 #local variable ... print('value of d is' + str(d)) ... >>> d_is_10() value of d is 10 >>> d Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'd' is not defined
d를 불러봐도 'd라는 이름이 없다'는 에러 메시지만 뜨지요? d_is_10() 함수가 실행되는 동안은 d가 있었는데, 함수의 실행이 끝난 다음에 함께 사라져버렸기 때문입니다. 반대로, 전역변수는 함수 안에서도 얼마든지 사용할 수 있답니다.
>>> x = 10 # global variable >>> def printx(): ... print(x) ... >>> printx() 10
그렇다면 지역변수 대신 전역변수만 쓰는 것이 편하겠다구요? 글쎄요… 전역변수는 프로그램이 복잡해질수록 골치거리가 된답니다. 다른 엉뚱한 함수 때문에 변수의 값이 바뀌어버리는 수가 종종 있거든요. 그래서 필요에 따라 지역변수와 전역변수를 골라 쓰는 것이 좋답니다.
그리고, 함수 안에서 전역변수를 만드는 방법도 있답니다. 어떤 변수를 전역변수(global)로 사용하겠다라고 명시해 주는 것이죠.
>>> def e_is_10(): ... global e # global variable ... e = 10 ... print('value of e' + str(e)) ... >>> e_is_10() value of e is 10 >>> e 10
여기서는 e_is_10() 함수가 실행되면서 e라는 전역변수가 만들어지고, 이 변수는 함수의 실행이 끝난 다음에도 없어지지 않습니다.