데코레이터는 함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.

대략적인 구조는 다음과 같다.

def outer_function(func):  # 기능을 추가할 함수를 인자로 받고,

    def inner_function(*args, **kwargs):  # 여기서 func 함수에서 받을 인자를 정의.
        return func(*args, **kwargs)

    return inner_func

그럼 데코레이터는 언제 쓰게 될까?

  1. 함수마다 공통적으로 호출되는 기능들을 하나로 묶을 때
  2. 함수의 내부를 수정하지 않고 변화를 주고자 할 때
  3. 특정 함수를 실행하는데 있어서 전처리 혹은 후처리가 필요한 경우

예를 들어, 다음과 같이 함수의 실행 속도를 측정하는 기능을 데코레이터로 만들어서 붙일 수 있다.

import time


def measure_performance(func):
    def wrapper(*args, **kwargs):  
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        elapsed = end - start
        print('Elapsed: {}'.format(elapsed))
        return result  # 데코레이터를 사용하는 함수의 결과값을 리턴
    return wrapper

이 함수를 데코레이터로 이용한 피보나치 계산 함수를 다음과 같이 선언해 본다.

data = {0: 1, 1: 1}


def _fibonacci(n):
    if n in data:
        return data[n]

    data[n] = _fibonacci(n-1) + _fibonacci(n-2)
    return data[n]


@measure_performance
def fibonacci_wrapper(n):
    val = _fibonacci(n)
    return val

그리고, 위에서 선언한 fibonacci_wrapper 함수를 한번 실행해 보자.

answer = fibonacci_wrapper(900)
print(answer)

다음과 같이 실행 결과를 가져오는 것을 확인할 수 있다.

Elapsed: 0.00044655799865722656
88793027306605937532517516910637647045239090036365766884466525589158360259770006891772711976920559280382807770394537471560061517120086971996377683290300054868066659454250625417891167369401

이렇듯 어렵지 않게 데코레이터를 사용할 수 있는데, 데코레이터 사용시에 주의해야 할 점으로는 무엇이 있을까?

다음 시간에서 이를 정리해 보고자 한다.

반응형

'Python' 카테고리의 다른 글

CentOS 7에서 파이썬 3 설치  (0) 2019.04.24
파이썬에서 __init__ 함수는 어떤 역할을 하는가?  (0) 2019.04.19

실행환경: AWS EC2 CentOS 7.6.1810

 

AWS EC2 CentOS 7버전 기준, 파이썬 2버전이 기본적으로 제공되고 있으나 3버전은 설치되어 있지 않다. 따라서 3버전을 활용하기 위해서는 우선 다음과 같은 절차를 통해 설치를 해주어야 한다.

 

(1) 필요한 유틸리티를 먼저 설치해 주기

$sudo yum update

$sudo yum install yum-utils

$sudo yum groupinstall development

 

(2) 파이썬 3버전 설치 (2019년 4월 24일 기준 3.6버전)

스탠다드 YUM 리파지터리가 아직은 파이썬3 릴리즈를 지원하지 않는다. 따라서 IUM (Inline with Upstream Stable)이라는 이름의 추가 리파지터리를 설치해 주어야 한다.

 

$sudo yum install https://centos.iuscommunity.org/ius-release.rpm 

 

위의 작업이 성공적으로 끝나면, 이제 파이썬 3.6 버전을 설치해 주면 된다.

 

$sudo yum install python36u

 

파이썬 3버전이 성공적으로 설치되었는지 확인 겸 세부버전 확인을 위해 다음과 같이 실행해 본다. 

 

$python3.6 -V

 

그러면 'Python 3.6.7'라는 결과를 콘솔에서 확인할 수 있을 것이다.

반응형

파이썬에서 __init__ 함수는 자바에서 생성자와 비슷한 역할을 한다. 즉, 한 객체에 대한 인스턴스를 생성할 때 호출되는 것이 __init__ 함수라고 보면 되겠다.

 

다음은 Car 클래스를 생성하고, 이 클래스에 대한 __init__ 함수를 정의한 후 인스턴스를 생성하면 어떻게 결과가 나타나는지를 보여주기 위한 예제 코드이다.

 

class Car:
    def __init__(self, brand):
        self.brand = brand
        print(brand + " 한 대가 생성되었습니다.")
        
        
c = Car("벤츠")

 

위의 코드를 실행해 보면 "벤츠 한 대가 생성되었습니다." 라는 메세지가 출력되는 것을 확인할 수 있다.

반응형

'Python' 카테고리의 다른 글

[파이썬] 데코레이터 (decorator)  (0) 2022.12.09
CentOS 7에서 파이썬 3 설치  (0) 2019.04.24

+ Recent posts