본문 바로가기
Python/왕초보를 위한 파이썬

3.2. 지역변수, 전역변수

by 가므자 2012. 4. 3.

오늘도 함수에 관한 이야기랍니다. 제목엔 변수라고 나와있지만요. 먼저 예제를 보실까요?

학교 다닐 때, 저희 학교 짱은 영구였습니다. 제가 전학가기 전까지는…

>>> jjang = '09'

제가 가서 바로 짱 먹었지요. 흐흐흐…

>>> jjang = 'pig dad'

애들한테 물어보면 누가 짱이라고 할까요? 당근…

>>> jjang
'pig dad'

그런데 자기네 반에서 짱이라고 깝죽거리는 녀석이 있었으니, 바로 땡칠이라는 친구였답니다. 반이라는 함수를 만들어 보죠.

>>> def ban():
...   jjang = '07'
...   print 'jjang =', jjang
...
>>> ban()
jjang = 07

그러나… 땡칠이도 제 앞에선 깨갱~이랍니다. 울 학교 짱은 변함 없이 저걸랑요…

>>> jjang
'pig dad'

ban() 함수 안에서 jjang = ‘07’이라고 하면 jjang이란 변수를 새로 만드는 거구요, 기존의 jjang에는 영향을 미치지 않습니다. 그리고, ban 함수가 끝날 땐 그 함수 내에서 만들었던 변수들은 모두 없어지는 거죠.

이와 같이 함수 안에서 만들어진 변수를 지역변수라고 하고, 함수 밖에서 만들어진 변수를 전역변수라고 합니다. 지역변수는 함수가 호출되면 만들어져서, 함수의 실행이 끝날 때 함께 없어지는 반면, 전역변수는 함수와는 관계없이 항상 꿋꿋이 지구를 지킨답니다. 그래서 영어로 전역변수를 global이라는 말로 표현하지용…

지역변수를 함수 밖에서 한번 불러볼까요?

>>> def d_is_10():
...     d = 10               # 지역변수
...     print 'd 값은 ', d, '입니다'
...
>>> d_is_10()
d 값은  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                 # 전역변수
>>> def printx():
...   print x
...
>>> printx()
10

그렇다면 지역변수 대신 전역변수만 쓰는 것이 편하겠다구요? 글쎄요… 전역변수는 프로그램이 복잡해질수록 골치거리가 된답니다. 다른 엉뚱한 함수 때문에 변수의 값이 바뀌어버리는 수가 종종 있거든요. 그래서 필요에 따라 지역변수와 전역변수를 골라 쓰는 것이 좋답니다.

그리고, 함수 안에서 전역변수를 만드는 방법도 있답니다. 어떤 변수를 전역변수(global)로 사용하겠다라고 명시해주는 것이죠.

>>> def e_is_10():
...     global e            # 전역변수
...     e = 10
...     print 'e 값은 ', e, '입니다'
...        
>>> e_is_10()
e 값은  10 입니다
>>> e
10

여기서는 e_is_10() 함수가 실행되면서 e라는 전역변수가 만들어지고, 이 변수는 함수의 실행이 끝난 다음에도 없어지지 않습니다.

저는 그만 시험보러 가야겠네요. 즐거운 주말 보내세요~.

출처 : wikidocs 왕초보를 위한 파이썬

'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글

3.4. 축약함수(Lambda)  (0) 2012.04.03
3.3. 값을 돌려주기  (0) 2012.04.03
3.1. 함수  (0) 2012.04.03
2.4. 스페인어로 숫자 읽기(1)  (0) 2012.04.03
2.3. for  (0) 2012.04.03

댓글