Python Inner function & Decorator

soominlee·2022년 8월 2일
0

🐍 Python

목록 보기
8/14

*해당 게시글은 <NAVER boostcourse> 에서 수강한 강의를 바탕으로 정리한 내용입니다.

First class obejct (일등함수, 일급객체)

  • 변수 또는 데이터 구조에 할당이 가능한 객체
  • 파라미터로 전달이 가능한 객체
  • 리턴 값으로 사용할 수 있는 객체
파이썬의 함수는 일급 함수이다.

Inner function

함수 내에 또 다른 함수가 존재하는 것

  • closure : inner function을 return 값으로 반환
  • decorator : 복잡한 클로저 함수를 간단하게 구현할 수 있다
def generate_power(exp):
	def wrapper(f):
    	def inner(*args):
        	result = f(*args)
            return exp**result
        return inner
    return wapper

@generate_power(2)
def raise_two(n):
	return n**2

Decorator

  • decorator는 함수의 앞 뒤를 장식시킬 수 있는 기능을 한다.
  • 부분적으로 중복되는 함수가 존재할 때 중복되는 부분을 decorator로 구현함으로써 코드의 재사용성을 높일 수 있다.
refrigerator = []
lable = []

def add_milk(milk):
	refrigerator.append(milk)
    label.append('milk')

def add_veg(veg):
	refrigerator.append(veg)
    label.append('vegitable')

def add_meat(meat):
	refrigerator.append(meat)
    label.append('meat')
    
add_milk('서울우유')
add_veg('상추')
add_meat('삼겹살')
decorator 사용 ↓
refrigerator = []
label = []

def add_item(func):
    def wrapper(*args):
        refrigerator.append(*args)
        func(*args)
    return wrapper

@add_item
def add_milk(milk):
    label.append('milk')

@add_item
def add_veg(veg):
    label.append('veg')

@add_item
def add_meat(meat):
    label.append('meat')
    

print(refrigerator)
print(label)
> ['초코우유', '상추', '삼겹살']
> ['milk', 'veg', 'meat']
  • decorate로 정의할 함수는 decorate할 함수를 func 로 받아와야한다.
  • inner 함수(wrapper, decorate 등으로도 선언함)를 선언하고 decorate 해주는 함수의 파라미터를 *args, **kwargs 로 받아온다.
  • 인자로 받아온 func 함수를 파라미터와 함께 원하는 위치에서 실행시킨다.
  • decorator는 중첩 적용할 수 있다.
profile
Soominlee

0개의 댓글