def parent_function():
def child_function():
print("this is a child function")
child_function()
#부모함수 호출 결과
parent_function()
> "this is a child function"
클로져 조건
def generate_power(base_number):
def nth_power(power):
return base_number ** power
return nth_power
# closure 생성 및 출력
power_of_two = generate_power(2)
# 부모함수의 변수인 base_number가 중첩함수에 격리되어 사용됨 => closure
power_of_two(7)
# base_number가 2로 이미 셋팅 되어 있는 함수
>>> 128
# 2^7 = 128
import time
# 함수의 수행시간을 출력해주는 데코레이터
def elapsed(func): # 함수를 인수로 받는다.
def wrapper():
start = time.time()
func() # 함수를 수행한다.
end = time.time()
print("함수 수행시간: %f 초" % (end - start)) # 함수의 수행시간을 출력한다.
return wrapper
@elapsed # @decorator함수이름
def myfunc():
print("함수가 실행됩니다.")
myfunc()
>>> 함수가 실행됩니다.
>>> 수행시간: 0.000005 초
# 동작원리
# decorated_myfunc = elapsed(myfunc)
# decorated_myfunc()
예제)
greeting
함수에 적용될 decorator 함수를 구현하여 greeting
함수에 적용해주세요.
greeting
함수가 호출 되었을때 decorator 함수에 parametor 값이 greeting
함수 리턴값의 다음에 붙혀져서 리턴되어야 합니다.
Decorator 함수의 이름은 welcome_decorator
여야 합니다.
예를 들어, 다음 처럼 정의 하여 welcome_decorator
decorator를 적용하여 greeting
을 호출하면:
@welcome_decorator
def greeting():
return "Hello, "
greeting()
결과값은 다음과 같아야 합니다.
"Hello, welcome to WECODE!"
def welcome_decorator(func):
def wrapper():
return func()+"welcome to WECODE!"
# greeting()+"welcome to WECODE!"
return wrapper
@welcome_decorator
def greeting():
return "Hello, "
처음에 return wrapper
뒤에 ()괄호를 붙이고 오류가나서 지웠더니 해결이 됐다.
return wrapper
뒤에 ()괄호가 없는데 wrapper 중첩함수가 어떻게 호출이 되는걸까?