본문 바로가기

Data_Analysis_Track_33/Python_문제풀이

Python_05_문제풀이(Decorator)

문제 : 함수가 실행된 실행시간(초)을 재는 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 타입