def parent_function(): # 1 def child_function(): # 3 print("this is a child function") # 4 child_function() # 2 print(parent_function()) # 5
출력값 : "this is a child function"
중첩함수(nested function) 혹은 내부 함수는 는 상위 부모 함수 안에서만 호출 가능합니다.
부모 함수를 벗어나서 호출될 수 없습니다.
중첩 함수가 부모 함수의 변수나 정보를 중첩 함수 내에서 사용한다.
부모 함수는 리턴값으로 중첩 함수를 리턴한다.
부모 함수에서 리턴 했으므로 부모 함수의 변수는 직접적인 접근이 불가능 하지만
부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다.
아래 nested function의 예를 들어보겠다.
def generate_power(base_number):
def nth_power(power):
return base_number ** power
return nth_power
a = generate_power(2) # a가 먼저 부모 def에 접근하고 2를 입력시킨다.
a(7) # 자식 def에 들어가 2**7을 성립시킨다.
> 128
a(10)
> 1024
b = generate_power(7)
b(3)
> 343
b(5)
> 16907
def welcome_decorator(func): # 4 def greeting()을 통째로 func에 대입
def wrapper(): # 6 래퍼 정의
return func() + "welcome to WECODE!" # 7 func()와 문자열 합체
return wrapper # 5 래퍼를 반환시켜라
@welcome_decorator # 1
def greeting(): # 2
return "Hello, " # 3
print(greeting()) # 8
결과값은
Hello, welcome to WECODE! 출력