반응형
파이썬 중첩함수 사용법 및 원리
파이썬에서 함수 내부에 또 다른 함수를 선언하는 중첩함수라는 개념에 대하여
작동 원리 및 변수의 범위를 간단한 예제를 통해 이해해보도록 하겠습니다.
함수 안의 함수 사용 예시
def 내에 def 구문을 사용하는 식으로 중첩함수를 쉽게 선언할 수 있습니다.
(lambda 형태를 사용하여 함수 내부 함수를 선언하는 것도 가능합니다.)
숫자 n을 input으로 넣으면 n을 더하는 내부 함수를 반환하는 함수의 예시는 아래와 같습니다.
def make_func(n):
def add_n(x):
return x + n
return add_n
참고로, def 내에 lambda를 사용한 케이스, lambda 내 lambda를 활용한 경우의
아래 선언 코드들도 모두 위의 코드와 같은 결과가 나타납니다.
# 위와 같은 경우 1
def make_func(n):
return lambda x : x + n
# 위와 같은 경우 2
make_func = lambda n : lambda x : x + n
위에서 선언한 make_func로 값 하나를 받아 5를 더하여 반환받는 my_func와
7을 빼서 반환받는 my_func2를 생성하여 사용해 본 결과는 다음과 같았습니다.
# 5를 더하는 함수
my_func = make_func(5)
my_func(10) # 15
my_func(20) # 25
# 7을 빼는 함수
my_func2 = make_func(-7)
my_func2(10) # 3
my_func2(20) # 13
반응형
중첩함수 변수 범위
위의 make_func 함수에서 n과 x는 모두 함수 내에서만 사용 가능한 지역 변수입니다.
다만, n은 바깥쪽의 함수(make_func)에서 선언되어 make_func 전체에서 사용이 가능하지만,
x는 안쪽 함수(add_n)에서 선언되어 add_n 내에서만 사용이 가능하다는
사용 가능 범위의 차이가 있습니다. 이를 그림으로 요약하면 아래와 같습니다.
만일, x를 아래 코드처럼 add_n 부분이 종료된 후 사용을 시도할 경우
NameError가 발생하게 되는 것을 확인할 수 있습니다.
def make_func(n):
def add_n(x):
return x + n
print(x) # 여기서 오류 발생(x 사용 가능 범위 이탈)
return add_n
my_func = make_func(5) # NameError: name 'x' is not defined
'Python > 파이썬 기초' 카테고리의 다른 글
파이썬 리스트 내 중복 원소만 추출/중복 제거 방법 정리 (0) | 2022.04.19 |
---|---|
파이썬 복소수, 허수 자료형 선언 및 연산 예제 (2) | 2022.04.11 |
파이썬 변수 자료형(타입) 확인 및 비교 방법 정리 (0) | 2022.04.08 |