Data_Analysis_Track_33/Python_문제풀이
Python_05_문제풀이(Decorator)
lsc99
2023. 8. 28. 18:49
문제 : 함수가 실행된 실행시간(초)을 재는 decorator를 작성
- import time 이용
import time
# 1970년 1월 1일 0시 0분 0초 부터 time.time() 함수가 실행된 시점까지 몇 초 지났는지를 반환 (1970년 1월 1일 0시 0분 0초 -> unix time)
# 1970년 1월 1일 0시 0분 0초 부터 얼마 지났는지로 현재시간을 관리 -> timestamp
v = time.time()
print(v)
print('a')
time.sleep(2) # sleep(초) 설정한 초만큼 프로그램을 멈춘다.
print('b')
decorator를 사용하지 않은 방식이다.
def func1():
a = time.time()
print(1)
time.sleep(2)
print(2)
b = time.time()
print(b-a, "초")
def func2():
a = time.time()
print(1)
time.sleep(4)
print(2)
b = time.time()
print(b-a, "초")
def func3():
a = time.time()
print(1)
time.sleep(1)
print(2)
b = time.time()
print(b-a, "초")
func1()
func2()
func3()
# 각 함수가 실행되는데 걸린 시간을 출력
decorator 사용한 방식
# 함수가 실행된 실행시간(초)을 재는 decorator
import time
def deco_time(func):
def wrapper(param):
time1 = time.time()
func(param)
time.sleep(1) # 함수 실행 속도가 너무 빨라 중간에 1초 sleep 걸기.
time2 = time.time()
# result_time = time2 - time1
# print(result_time)
print(time2 - time1 - 1, "초")
return wrapper
@deco_time
def greet(name):
print(f"{name}님 환영합니다.")
v = greet("홍길동")
강사님 버전
# 강사님 버전
import time
# 함수를 실행하는데 걸린 시간을 체크하는 decorator 정의
def timechecker(func):
def wrapper(*args, **kwargs):
s = time.time()
v = func(*args, **kwargs)
e = time.time()
print(f"{func.__name__}()의 걸린시간 : {e-s}초")
return v
return wrapper
@timechecker
def func1(a):
print(1, a)
time.sleep(2)
print(2)
@timechecker
def func2(a, b, c):
print(1, a, b, c)
time.sleep(4)
print(2)
@timechecker
def func3():
print(1)
time.sleep(1)
print(2)
func1(10)
func2("a", "b", "c")
func3()
# 각 함수가 실행되는데 걸린 시간을 출력
반올림 내장함수 round() 와 반올림 표현
# 반올림 (내장함수)
round(2.00000012453453441)
round(2.400000012453453441, 5) # 5 : 자리수 - 소수점 5자리 이하에서 반올림
round(129.000, -1)
# 0 : 소수점이하에서 반올림
# 양수 -> 소수점 위치
# 음수 -> 정수부 위치
a = 2.12833256575
f"{a:.2f}초" # .2f : 소수점 2자리 이하에서 반올림. f: float 타입