250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BigQuery
- requests
- gather_nd
- airflow subdag
- spark udf
- flask
- GenericGBQException
- chatGPT
- API
- correlation
- 공분산
- session 유지
- Airflow
- grad-cam
- tensorflow text
- UDF
- hadoop
- top_k
- 유튜브 API
- youtube data
- login crawling
- 상관관계
- Retry
- GCP
- subdag
- Counterfactual Explanations
- XAI
- integrated gradient
- API Gateway
- TensorFlow
Archives
- Today
- Total
데이터과학 삼학년
Decorator (데커레이터) 본문
반응형
파이썬 데커레이터는 말 그대로 꾸며주는 함수라고 생각하면 된다.
클로저와 데커레이터의 가장 큰 차이는 데커레이터는 함수를 argument로 받는다는 점이다.
실행 시간을 나타내는 clock이라는 데커레이터를 보자
import time
def clock(func):
def clocked(*args):
t0 = time.perf_counter()
result = func(*args)
elapesd = time.perf_counter() - t0
name = func.__name__
arg_str = ', '.join(repr(arg) for arg in args)
print('[%0.8fs] %s(%s) -> %r' %(elapesd, name, arg_str, result))
return result
return clocked
이렇게 clock이라는 데커레이터를 만들고
적용방법은 @<데커레이터함수명> 으로 함수위에 호출해주면 된다
@clock
def sum(n):
c = 0
for i in range(n+1):
c += i
return c
위처럼 데커레이터를 적용해주면
이러한 결과를 얻을 수 있다.
데커레이터 관련해서는 cache를 사용하는 방법도 있는데..그것은 다음에 소개하도록 하겠다.
암튼 데커레이터는 내가 사용하고자 하는 function을 꾸며주는(기능을 추가해주는) 역할로 보면되고,
파이썬에서 데커레이터로 총 @property, @classmethod, @staticmethod 3개의 내장함수를 제공해준다!
실제로 데커레이터로 많이 쓰이는 것은 functools.lru_cache 인데.. 이것은 memoization을 구현하여, 이전에 실행했던 인수(args)에 대해 다시 계산할 필요가 없게 해주며, 무한정으로 cache를 늘리지 않기 위해 오랫동안 사용하지 않은 항목은 버리는 것을 의미한다.(lru : least recently used)
728x90
반응형
LIST
'Python' 카테고리의 다른 글
모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유) (4) | 2020.03.23 |
---|---|
OS 모듈 정리 (0) | 2020.03.02 |
Closer (클로저) (0) | 2020.01.12 |
Abstract method (추상 메서드) (0) | 2020.01.10 |
파이썬 Multiprocessing (4) | 2020.01.09 |
Comments