상세 컨텐츠

본문 제목

파이썬 Decorator 개념완벽정복

IT 공부/데이터분석

by 듀_77 2020. 7. 19. 20:50

본문

반응형

1-46

중복코드를 묶어서 코드를 바꾸지 않고,

기능을 추가하거나 수정하고 싶을 때 쓰는 문법이

데코레이터 함수다.

 

(중복되는 코드1,코드 3을 묶어주고

남는 1, 4코드는 추가기능으로 만들어버림)

1. wrapper라는 inner function을 만들어줌.

2. 모든 아규먼트와 키워드 아규먼트 받을 수 있도록 파라미터를 설정

def wrapper(*arg, **kwargs)

 

3. code_1에서 func 실행

 

4. 그리고 return wrapper

1. def a() 함수가 wrapper로 바뀜.

def b() 함수도 wrapper로 바뀜.

 

2. @c를 쓰면 데코레이터 함수가 실행됨.

[순서]

 

1. @c를 쓰면 데코레이터 함수가 실행,

 

골뱅이 밑의 def a() 함수가

c(func)에 들어감.

 

2. c함수가 실행,

result=func(*args, **kwargs) 부분이

def_a()의 code_2를 실행

 

3. code2가 실행된 결과를 result 변수에 저장

 

4. return wrapper:

code 1,2,3을 실행한 result를

return해주는 함수가 선언됨.

 

5. def a()함수가 wrapper함수로 치환됨( 바뀜 )

def a()함수가 return 부분에서 wrapper 함수가 된 거임.

 

6. 데코레이터 부분에서

def a()함수 실행하면, wrapper함수가 실행되는 거나 다름없어짐.

 

---

그러니까 def c(func)은 def a()가 된 건데

code2를 실행해주는 부분은 result 파트인 것임.

 

요약: def c(func)이 def a()로 변경.

code 1,2,3이 실행된 result가 

속한 함수는 wrapper.

이 wrapper함수가 마지막에 def a()로 바뀌면서

def a()실행시 위 코드가 작동함.

 

위 개념을 활용한 예제!

print를 제외하고 보면 코드구조가 더 심플해보인다.

 

a라는 함수가 있다고 쳐보자.

요건 b라는 함수.

이제 code1과 code3을 묶어주는 

decolator function c를 만들어볼 것.

 

1. start와 result를 출력해주는 의미의 disp 함수를 생성해준다.

2. 그 밑에 wrapper함수로, code1과 code2 생성

 

3. 가운데에 code2와 code 4를 받을 수 있는 result를 생성.

 

 

#a,b

a와 b를 저런 식으로 출력하면,

start

result:3의 결과가 나와야한다.

 

#a

반면에 a만 그냥 쓰면

code 1,3이 실종된 상태로 출력되어버린다.

 

a,b에 각각 데코레이터 함수 c를 

적용시킨 상태기 때문에..!

 

*

@disp를 불러오면 #a 함수만 불러와도

code 1,3이 적용된 상태로 소환이 가능하다.

(plus함수가 c의 wrapper함수로 바뀌기 때문에)

 

★ 1. @disp를 쓰면 해당 함수가

c의 decorator 설정으로 넘어가서,

wrapper함수로 변환된다.

 

2. plus 함수가 c의 disp(func)의 func에 들어간다.

(plus 함수 호출시 wrapper 함수 호출되는 거랑 똑같아짐)

 

3. wrapper함수가 선언되고, return 하면

plus함수가 wrapper 함수로 변환!

 

4. 그래서 plus를 실행하면 wrapper 안의 함수들이 실행.

 

 

*decorator 추가개념 소스들

http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-decorator/

 

SchoolofWeb :: 파이썬 - 데코레이터 (Decorator)

파이썬 데코레이터 (Decorator)강좌

schoolofweb.net

https://bluese05.tistory.com/30

 

python decorator (데코레이터) 어렵지 않아요

Python decorator (데코레이터)  Python 으로 작성된 Opensource 의 코드들을 보다 보면, 아래와 같이 @ 로 시작하는 구문 들을 볼 수 있다. @decorator_ def function(): print "what is decorator?"  decorat..

bluese05.tistory.com

https://dojang.io/mod/page/view.php?id=2427

 

파이썬 코딩 도장: 42.1 데코레이터 만들기

Unit 42. 데코레이터 사용하기 파이썬은 데코레이터(decorator)라는 기능을 제공합니다. 데코레이터는 장식하다, 꾸미다라는 뜻의 decorate에 er(or)을 붙인 말인데 장식하는 도구 정도로 설명할 수 있습

dojang.io

 

반응형

관련글 더보기

댓글 영역