본 포스팅은 패스트 캠퍼스의 [온라인] 데이터 사이언스 스쿨을 수강하며 학습한 내용을 정리한 것입니다.
데이터 사이언스 스쿨 온라인
대학교재보다 상세한 강의자료, 현직 실무자의 노하우까지 모두 얻어가세요 ! 이미 수많은 비전공자들이 데이터 사이언티스트로 커리어 전환에 성공한 바로 그 강의. 데이터 사이언스 스쿨 오프라인 정규 과정을 이제는 온라인에서 만나보세요!
www.fastcampus.co.kr
Decorlator는 함수에서 코드를 바꾸지 않고 기능을 추가하거나 수정하고 싶을 때 사용하는 문법이다.
아래 코드블럭을 살펴보면, 선언된 함수 a와 b에 code_1과 code_3이 반복되는 것을 알 수 있다. 따라서 함수 c를 선언해 중복되는 code_1과 code_3을 사용할 수 있게끔 하고 중복되지 않는 code_2와 code_5는 wrapper의 result로 받는다. 함수 a와 b를 선언하게 되면, 결과적으로 wrapper로 치환되는 것이다.
사용방법은 데코레이터 함수를 선언하고(아래 코드블럭 c 참조) 사용하고자하는 함수 위에 @데코레이터함수명 을 쓰면된다.
def a():
code_1
code_2
code_3
def b():
code_1
code_5
code_3
def c(func):
def wrapper(*args, **kwargs):
code_1
result = func(*args, **kwargs)
code_3
return result
return wrapper
@c
def a():
code_2
@c
def b():
code_4
활용예제 : 함수의 실행시간을 출력하는 데코레이터 함수 작성
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time() # code_1
result = func(*args, **kwargs) # code2, code4
end_time = time.time() # code_3
print("running time : {}".format(start_time-end_time)) # code3
return result
return wrapper
@timer
def test1(num1, num2):
data = range(num1, num2+1)
return sum(data)
@timer
def test2(num1, num2):
result = 0
for num in range(num1, num2+1):
result += num
return result
test1(1, 100000) # 실행결과 : running time : -0.0019974708557128906
test2(1, 100000) # 실행결과 : running time : -0.004986286163330078
# 활용예제 2 : ID와 PASSWORD를 확인하여 일치하는 경우에만 함수를 실행하는 decorlator함수 작성
1. 개인의 정보는 id, pwd, addr 3가지를 묶어 dict형식이며 개인의 정보를 묶어 list형태로 저장함
datas = [{"id":"Kobe", "pwd":"Bryant", "addr":"LA"}, ... ]
2. Logic
- id와 password를 먼저 입력받는다.
- 입력받은 id와 password를 비교하기 위해 for문을 활용한다.
- for data in datas: 형태로 for문을 선언한다.
- data["id"] == 입력받은 ID and data["pwd"] == 입력받은 Password 일 때 함수를 실행한다.
- 실제코드는 아래 Github 링크 참조
Seuleeee/python_algorithm
Contribute to Seuleeee/python_algorithm development by creating an account on GitHub.
github.com
'Python > Tutorial' 카테고리의 다른 글
[Python] Class(1) - 기본 클래스의 사용, 객체지향(OOP), 생성자 (0) | 2020.04.03 |
---|---|
[Python] 함수(3) - map, filter, reduce (0) | 2020.04.03 |
[Python] 함수(2) - docstring, scope, inner function, lambda function (0) | 2020.04.03 |
[Python] 함수(1) - 기본 함수, parameter, argument, return, *args, **kwargs (0) | 2020.04.02 |
[Python] 반복문 - while, for, break, continue, list comprehention (0) | 2020.04.01 |