데코레이터 예제에 대한 질문입니다.
305
작성한 질문수 14
def perf_clock(func):
def perf_clocked(*args):
#함수 시작 시간
st = time.perf_counter()
# 함수 실행
result = func(*args)
# 함수 종료시간
et = time.perf_counter() -st
# 실행 함수명
name = func.__name__
# 함수 매개변수(출력) (,로 구분해서 나옴)
arg_str = ', '.join(repr(arg) for arg in args)
#결과 출력
print('[%0.5fs] %s(%s) -> %r' % (et, name, arg_str, result))
(return result)
return perf_clocked
이 예제의 구조를 파악하며 실행 과정을 공부해봤습니다.
그래서 내부함수 perf_clocked에서 return result를 지워보고 실행을 해봤는데 데코레이터 실행에 문제가 없었습니다.
수업시간에 언급하신 것처럼 closure 구조인건 이해를 했는데 return result의 역할이 무엇인지 잘 모르겠습니다.
항상 친절한 답변에 감사드립니다.
답변 3
0
return result 를 안하면
print(time_func(1.5))
print(sum_func(100, 150, 250, 300, 350))
이렇게 했을때 출력이 None 으로 나옵니다. 리턴값을 사용하지 않는경우는 문제가 없지만 리턴값이 필요한 경우는 return result 가 필요합니다. sum_func 의 결과(1150)를 다른곳에서 사용하려면 리턴이 필요합니다.
이해하신 클로저 구조와 return result 의 있고 없음은 아무 상관이 없습니다.
0
답변 감사드립니다.
보내주신 링크로 클로저 관련 글들을 읽어보았습니다.
글을 읽으며 제가 궁극적으로 궁금했던 것은 클로저의 구조와 개념이었습니다.
그래서 제가 궁금한 것은 1, 2 에서 차이점으로 'return result'는 예제의 클로저 구조에서 있어도 되고 없어도 되는 것이 아닌가요?
왜냐하면 제 생각은 result 값인 func(*args)를 실행한 결과 값을 프리변수에 저장하는 것이 아닌 func 자체를 저장하고 있다고 생각하기 때문입니다.
저의 나름대로 정리한 클로저는 프리변수에 상태, 결과, 인자 값들을 저장하고, 보이지 않지만 불러와서 활용하는 함수라고 생각합니다. 그래서 1번에서 '클로저는 def perf_clocked()함수'이고 '프리변수로 func을 저장 및 활용'하고 있다고 이해하고 있습니다.
혹시 제가 생각하는 클로저의 개념과 이해가 잘못되었는지 궁금합니다.
1. 제가 생각하는 클로저 구조
# def perf_clock(func):
# def perf_clocked(*args):
# return perf_clocked
2. 강의에서 설명해주신 클로저 구조
# def perf_clock(func):
# def perf_clocked(*args):
# return result
# return perf_clocked
항상 좋은 답변 감사드립니다.
오늘도 좋은 하루되세요
0
클로저가 이해가 안되면 이어지는 데코레이터 제네레이터 코루틴 전부 이어져 있습니다.
이해하기 쉬운 글을 토대로 한 번 읽어보세요
https://www.google.com/search?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC+%ED%81%B4%EB%A1%9C%EC%A0%80&oq=%ED%8C%8C%EC%9D%B4%EC%8D%AC+%ED%81%B4%EB%A1%9C%EC%A0%80&aqs=chrome..69i57.1488j0j15&sourceid=chrome&ie=UTF-8
진도미확인 (진도가 안 넘어감)
0
40
1
RuntimeError: There is no current event loop in thread 'MainThread'
0
84
1
chapter 07-01 실행 오류
0
66
1
Chapter05-04 : sum_func의 합이 이중 출력됩니다.
0
76
2
45. 병렬성 2 - Futures(5-1) wait가 의도된 대로 동작하지 않습니다.
0
92
2
멀티스레딩 - 44. 병렬성 1 - Futures(4-2)
0
70
2
chapter05_02 클로저 질문사항 !
0
50
1
LV1 설정
0
87
2
매직 메소드의 호출 방법 차이 문의
0
131
2
왜 numbers리스트를 만들때 str으로 숫자를 감싸나요?
0
93
2
스크랩핑 실습 중 Mac OS 인증서 문제
0
129
1
AsyncIO 멀티 스크랩핑 실습 예제 관련 질문
0
167
1
강의자료가 영상과 다릅니다
0
255
2
closure.cell_contents 초기화 하기 문의
0
129
2
map함수 사용 시, list변환 방법 문의
0
335
2
__mul__ 백터 * 숫지, 백터 * 백터 처리
0
143
1
del처리후 질문입니다.
0
153
1
car_list(car1,car2,car3) 인스턴스 tuple 타입 문의
0
223
1
coroutine에 대한 질문
0
242
1
제너레이터 이터레이터 질문이 있습니다.
0
248
1
atom install package search not working
0
275
1
Magic Method - Not Implemented
0
394
1
가상환경 질문!
0
401
1
병렬처리 추가 질문이 있습니다.
0
243
1





