IT/파이썬

파이썬 데코레이터

thesse 2021. 5. 27. 15:33
300x250
반응형

데코레이터

@app.route("/")와 같은 데코레이터를 직접 만들자

 

def decorator():
	dec wrapper():
    	...
	return wrapper

기본적으로 이런 형식

이렇게 만들어놓고 @decorator 처럼 앞에 @ 붙여서 함수 위에다 쓰면 됨

 

 

예제

# 데코레이터 정의
def mydeco(func):
  def a():
    print('func start')
    func()
    print('func end')
  return a

# 함수에 적용
@mydeco
def myfunc():
  print('i am myfucn')

 

 

이제 myfunc()를 호출하면 아래처럼 나온다

 

 

return

리턴해주는 함수는 이렇게

(사실 똑같음... 그냥 return 한번 더해주는것 뿐)

def mydeco(infunc):
  def a():
    return f'{infunc()} decorated'
  return a

@mydeco
def myfunc():
  return "i am myfunc"

이러고 print(myfunc()) 해주면 아래처럼 나옴

 

 

 

* 인자 넣어서 만들기

@mydeco
def myfunc(name)):
  return f"i am {name}"

위와 같이 파라메터가 들어오는 함수의 경우에는 어떻게 해야 할까?

클로저가 어쩌고 하던데 이부분은 공부를 좀 더 해봐야겠다.

300x250
반응형