Molybdenum의 개발기록

[TIL] 9일차_PYTHON_Decorator 본문

TIL

[TIL] 9일차_PYTHON_Decorator

Molybdenum_j 2023. 3. 3. 18:15

▶ 데코레이터 : decorator

  • 함수에서 중복되는 코드를 빼서 데코레이터 함수로 만들어 코드를 작성하는 방법
  • 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 주로 사용

-> deco 함수의 파라미터 fucn1이 들어감

-> func1 함수는 deco 함수의 return 함수인 wrapper 함수로 변경한다.

def wrapper = 호출할 함수를 감싸는 함수 (마지막으로 wrapper함수를 다만들었으면 return을 사용해 wrapper 함수 자체를 반환한다.

def func1():
    print('code1')
    print('code2')
    print('code3')

def func2():
    print('code1')
    print('code4')
    print('code3')
    
def deco(func):
    def wrapper(*args, **kwargs):
        print('code1')
        func()
        print('code3')
    return wrapper

 

@deco

def 함수이름():

코드

@deco
def func1():
    print('code2')

@deco
def func2():
    print('code4')

func1()
func2()

code1
code2
code3
code1
code4
code3

 

  • timer 데코레이터 함수 생성
import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time() # 현재시간 저장
        result = func(*args, **kwargs)
        end = time.time() # 현재시간 저장
        print(f'running time : {end - start} sec')
        return result
    return wrapper
@timer
def plus(n1, n2):
    return n1 + n2

def minus(n1, n2):
    return n1 - n2

-> plus에는 timer가 붙어서 time이 나오지만 minus에서는 붙어있지 않아 나오지 않는다.

plus(3,2)

running time : 1.6689300537109375e-06 sec
5
minus(3,2)

1

 

  • 패스워드를 맞춰야 함수의 실행이 가능하도록 하는 데코레이터 작성
def admin(func):
    def wrapper(*args, **kwargs):
        pw = input('insert password : ')
        if pw == 'python': # 패스워드 맞음
            result = func(*args, **kwargs)
        else: # 패스워드 맞지 않음
            result = 'wrong password!'
        return result
    return wrapper
def plus(n1, n2):
    return n1 + n2

@timer
@admin
def minus(n1, n2):
    return n1 - n2
plus(1,2)

3
minus(1,2)

insert password : python
running time : 3.484102249145508 sec
-1

 

 

출처-멋쟁이사자처럼_AISCHOOL_박두진강사님

'TIL' 카테고리의 다른 글

[TIL] 9일차_QUIZ  (0) 2023.03.03
[TIL] 9일차_PYTHON_Correlation_Cofficient_Code  (0) 2023.03.03
[TIL] 9일차_PYTHON_Class  (0) 2023.03.03
[TIL] 8일차_PYTHON_Function_03  (0) 2023.03.03
[TIL] 8일차_PYTHON_Fuction_02  (0) 2023.03.03
Comments