파이썬 함수 내에서 선언한 변수의 스코프(범위)는 기본적으로 해당 함수 내로 제한됩니다. 이는 함수 내에서 사용되는 변수가 함수 외부의 변수들과는 독립적이라는 의미이기도 합니다.
a = 1
def cal(a):
a += 1
return a
print(cal(a))
# 2
print(a)
# 1
위 예시에서는 cal()
함수 밖에 a
라는 변수가 존재합니다. 함수에 a
를 인수로 넣어 얻게 되는 결과값은 2
이지만, 함수 밖의 a
변수의 값은 여전히 1
입니다.
함수 내의 변수가 함수 안에서만 유효하다는 건 다음 방식으로도 확인할 수 있습니다.
def cal(a):
a += 1
return a
print(cal(1))
# 2
print(a)
# NameError: name 'a' is not defined
이처럼 마지막 print(a)
에서 오류가 발생하는 이유는 함수 외부에서 a
변수가 선언된 적이 없기 때문입니다.
그렇다면 함수 내부에서 함수 외부의 결과값을 변경할 수는 없을까요? 다음과 같이 마지막 함수의 결과값을 외부 변수에 할당하면 가능합니다.
a = 1
def cal(a):
a += 100
return a
print(a)
# 1
a = cal(a)
print(a)
# 101
그러나 이 때에도 함수 내부의 a
와 외부의 a
는 여전히 다른 변수이며, 해당 결과값이 동일할 뿐입니다.
다음과 같이 global
을 사용하여 변경할 수도 있지만, 이는 권장되지 않는 방법입니다.
a = 1
def cal():
global a
a += 100
return a
cal()
print(a)
# 101
'개발 > Python' 카테고리의 다른 글
파이썬 클라스 설명 (1) 클라스란? (0) | 2021.12.13 |
---|---|
파이썬 함수 설명 (1) 입력과 출력 (0) | 2021.12.08 |
파이썬 for 구문 설명 (0) | 2021.12.07 |