함수 안에서 선언한 변수의 효력 범위
함수 안에서 사용할 변수의 이름을 함수 밖에서도 동일하게 사용한다면 어떻게 될까?
예제를 통해 답을 찾아보자!
아래 함수를 살펴보자.
함수 밖에서 a변수에 1을 대입했다.
입력으로 들어온 값에 1을 더해 주고 결괏값은 돌려주지 않는 vartest 함수를 선언한다.
그리고 vartest 함수에 입력값으로 a를 주었다.
마지막으로 a의 값을 출력한다.
코드를 실행하기 전 출력이 어떻게될지 고민해보자.
# vartest.py
a = 1
def vartest(a):
a = a + 1
vartest(a)
print(a)
결과는 1이 출력될 것이다.
그 이유는 함수 안에서 새로 만든 매개변수는 함수 안에서만 사용하는 '함수만의 변수'이기 때문이다.
따라서 함수 밖에서 선언된 a변수를 출력하여 1이 출력된 것이다.
함수의 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관이 없다.
아래 함수를 실행하기 전 어떤 결과가 나올지 고민해보자.
def vartest(a):
a = a + 1
vartest(a)
print(a)
결과는 오류 메세지가 출력될 것이다.
그 이유는 print(a)에 a 변수가 어디에도 정의되지 않았기 때문이다.
함수 안의 a라는 매개변수는 함수 안에서만 사용되기 때문이다.
함수 안에서 함수 밖의 변수를 변경하는 방법
그렇다면 vartest라는 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가시킬 수 있는 방법은 없을까?
이 질문에 2가지 해결 방법이 있다.
1. return 사용하기
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a)
a = vartest(a)는 vartest(a)의 결괏값을 함수 밖의 변수 a에 대입한다.
(근데 여기가 좀 이해가 안간다. vartest(a)의 결괏값을 a에 대입한다고 했는데 vartest(a)에 입력값으로 1을 주는건가?
즉 a = vartest(1)인건가?? vartest(a)와 함수 밖의 a 변수는 다른데 왜 이렇게 되는지 잘 모르겠다...)
2. global 명령어 사용하기
# vartest_global.py
a = 1
def vartest():
global a
a = a + 1
vartest()
print(a)
global a 문장은 함수 안에서 함수 밖의 a 변수를 사용하겠다는 뜻이다.
그러나 함수는 독립적으로 존재하는 것이 좋기 때문에, global 명령어는 사용하지 않는 것이 좋다.
첫번째 방법을 사용하는 것을 권장한다!
끝><
'Python' 카테고리의 다른 글
매개변수 초깃값 설정 (SyntaxError: non-default argument follows default argument) 오류 메세지 이유 (0) | 2022.06.25 |
---|---|
Python 함수의 return에 대해 알아보자! (0) | 2022.06.25 |
Python 매개변수 *args, **kwargs 사용해보기 (0) | 2022.06.22 |
Python 입력값과 결괏값에 따른 함수 총정리 (0) | 2022.06.22 |
6. 모듈과 패키지_절대 경로와 상대 경로의 Import (0) | 2022.06.07 |