티스토리 뷰

반응형

아래와 같이 작성한 프로그램을 실행하면 어떻게 될까?


1
2
3
4
5
6
#-*- coding: utf-8 -*- 
def vartest(a):
    a = a + 1
 
vartest(3)
print(a)
cs


혹시 4가 출력될것이라고 생각한 사람이 있는가? 그렇다면 틀렸다. 직접실행해 보자.


1
2
3
4
5
Naui-MacBook-Pro:Desktop$ python hello.py
Traceback (most recent call last):
  File "hello.py", line 6in <module>
    print(a)
NameError: name 'a' is not defined
cs


직접실행을 하면 NameError: name 'a' is not defined > 가 에러가 발생한다. 이유는 출력을 하려는 'a'는 변수선언이 되지 않았기 때문이다. 

즉, 함수 안에 선언된 변수는  함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다. 

그럼 위 함수를 이용해서 함수 밖의 변수 a를 1만큼 증가시킬수 있는 방법은 어떻게 하면 될까? 


함수 안에서 함수 밖의 변수를 변경하는 방법


첫번째, return 이용하는 방법

1
2
3
4
5
6
7
= 1 
def vartest(a): 
    a = a +1 
    return a
 
= vartest(a) 
print(a)
cs


vartest함수는 입력된 값에 1을 더해 리턴을 해주는 함수이다. a = vartest(a) , a에 vartest(a)를 대입하면 a가 vartest 함수의 결과 값을 고 바뀐다. 여기서 vartest 함수 안의 a와  함수 밖의 a는 서로 다른 것임을 알아두자!


두번째, global 명령어를 이용하는 방법

1
2
3
4
5
6
7
8
#-*- coding: utf-8 -*- 
= 1 
def vartest(): 
    global a 
    a = a+1
 
vartest() 
print(a)
cs


vartest함수안에 global a라는 문장은 함수 밖의 a변수를 직접 사용을 하겠다는 의미이다. 


(중요!) 이렇게 global변수를 사용해도 되지만, 사실 프로그래밍을 할때는 global변수를 사용하지 않는 것이 좋다. 이유는 함수는 독립적으로 존재하는 것이 좋기때문에  외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니기 때문이다. 

가급적 global 명령어을 사용하기 보다는 첫번재 방법을 사용하자

제 포스팅이 도움이 되셨다면

♡공감↓ 꾸~욱 부탁드려요^^ 

더 나은 포스팅에 큰 힘이 됩니다.





반응형
댓글