1. Closure: 중첩함수, nested functions
    • 부모 함수는 중첩함수를 return함
    • 중첩함수는 부모함수의 변수를 사용할 수 있음
    • advantage:
      • 연산을 실행할 때 기반이 되는 정보에 접근을 제한하기 위해 사용
      • 무언가를 생산해내는 패턴에서 사용: 함수나 객체 만들어 낼 때
def generate_power(base_number):

    def nth_power(power):
        return base_number ** power

    return nth_power

calculate_power_of_two = generate_power(2)
power_of_two(7)
 => 2 ^ 7 = 128
  1. Decorator : 중첩함수를 리턴하는 함수, 다른 함수에 적용하여 적용된 함수가 실행하기 전 무조건 실행됨
    • 특정 함수가 실행하기 전 강제적으로 다른 함수가 먼저 실행된 후 실행되도록 함
    • Decorator는 chain of functions임: 여러개의 함수가 동시에 호출되어야 함
    • 기본포맷
def decorator(func):
        def wrapper ():
            if True:
                func()
            else:
                return
        return wrapper

    greeting():
        print("say hi")
  • Decorator가 chains of function이기 때문에 여러개의 함수가 중첩된 함수일 수 있음
def name_decorator(person):
  def first_wrapper(func):
    def second_wrapper():
      return func() + person
    return second_wrapper
  return first_wrapper


def greeting():
  return "Hello, "
  • 위와같이 작성하면 decorator가 function이외에 다른 값도 parameter로 받을 수 있음