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
- AB테스트
- 프로그래머스
- 내배캠_학습기록
- 리스트
- ★
- Join
- 태블로
- f-string
- Til
- 이중for문
- SQL
- 한줄for문
- 통계학
- SQLD
- 시각화
- python
- Set
- Leetcode
- 가설검정
- 반복문
- 데이터전처리
- 다중공선성
- map
- Max
- 선형회귀
- 데이터시각화
- 내일배움일지
- DATE_SUB
- 내일배움캠프
- 아티클스터디
Archives
- Today
- Total
노력에는 지름길이 없으니까요
파이썬, 데코레이션 본문
728x90
심화과정에 속하는 기술이라고는 했지만,
예전에 사용법을 제대로 알아두지 않았던 탓에 애를 먹었던 기억이 있어서 이번 기회에 조사해두려고 한다.
데코레이션이란?
- 데코레이터(Decorator)는 파이썬에서 함수나 메서드의 기능을 확장하거나 수정하는 기능
- 데코레이터는 함수나 메서드를 인자로 받아 해당 함수나 메서드를 변경하거나 래핑하는 함수이며, 이를 통해 코드를 더 간결하고 재사용 가능하게 만들 수 있다.
- 즉, 기존의 함수를 따로 수정하지 않고도 추가 기능을 넣고 싶을 때 사용
기본 구조
def decorator_function(original_function):
def wrapper_function(**kwargs):
# 함수 호출 전에 실행되는 코드
result = original_function(**kwargs)
# 함수 호출 후에 실행되는 코드
return result
return wrapper_function
def my_decorator(func): #func이 두개 이상 될 가능성도 있나?
print(f"시작!!!!!!!! my_decorator에서 출력하는 문자열 {func}")
def wrapper(test1=7, test2=8): #이 wrapper가 say_hello, test_first에 해당함
print("my_decorator 내 wrapper 메소드")
func(test1, test2)
print("my_decorator 내 wrapper 메소드")
print(f"끝!!!!!!!! my_decorator에서 출력하는 문자열 {func}")
return wrapper
@my_decorator
def say_hello(test1, test2):
if test1 >50 : print(f"Hello! {test1} 그리고 {test2}")
else: print("Hello!")
@my_decorator
def test_first(test1, test2):
print(f"테스트 {test1} 그리고 {test2}")
say_hello(100,200)
say_hello()
test_first(1,2)
결과
텐서플로우에서 자주 쓰이게 됨
텐서플로우는 그래프 연산 방식을 사용함
유용하게 사용한다면 더 빠르게 코드를 실행할 수 있겠으나, 항상 만능은 아니다.
계산량이 적고 작은 연산이 많이 있는 상황에서는 유리하지만, 계산량이 큰 연산이 있는 경우에는 속도 향상이 크게 차이나지 않는다.
출력되는 횟수와 순서가 잘 이해가 가지 않아서 튜터님께 질문했는데, 조금 정리가 됐다.
@my_decorator가 선언되는 순간 my_decorator라는 원본함수가 실행되면서 내부에 있는 print문이 전부 출력된 것.
그리고 각각 대체되는 함수가 불려지면서 대체된 각각의 wrapper 함수가 실행되었다고 이해하면 된다.
728x90
반응형
'Python' 카테고리의 다른 글
그래프 (Graph)의 정의, 장단점, 구현법 (1) | 2024.07.18 |
---|---|
dictionary(사전형) 정리 (0) | 2024.07.15 |
파이썬, 불리언 인덱싱이란? (0) | 2024.07.12 |
파이썬 클래스, init과 self에 대한 이해 (0) | 2024.07.12 |
파이썬 포맷팅 (0) | 2024.07.11 |