참조 : python decorator (데코레이터) 어렵지 않아요 (tistory.com) , Python 데코레이터(Decorator). 데코레이터란? | by 홍찬기 | Medium

데코레이터에 대하여 위의 블로그에서 이미 잘 설명해놓았다.

데코레이터를 활용해서 간단히 팩토리얼을 메모이제이션을 통해 구하는 함수를 만들어보았다.

그런데,, 뭐가 제일 Pythonic한지, 데코레이터와 메모이제이션을 잘 활용했다고 해야할지 모르겠어서.. 혹시나 이 글을 보게되는 여러분들께 어떤게 더 파이썬스러운 코드인지 의견을 여쭙고싶다.

1번코드

def memoize_factorial(f): 
    memory = {1:1,2:2} 
    def wrapper(*args, **kargs):
        k=f(*args,**kargs)
        i=2
        while i<k:
            i+=1
            memory[i] = memory[i-1] * i
        return memory[k]
    return wrapper

@memoize_factorial
def facto(num): 
    return num
facto(5)

2번코드

def memoize_factorial(func): 
    memory = {1:1,2:2}
    def wrapper(*args, **kargs):
        k=args[0]
        if k in memory : return memory[k]
        else:
            i = len(memory)
            while i<k:
                memory[i+1] = memory[i]*(i+1)
                i+=1
        return memory[k]
    return wrapper

@memoize_factorial
def facto(num):
    if num==1: return 1
    else: return num * facto(num-1)
facto(3) , facto(5)

3번코드

def memoize_factorial(f): 
    memory = {} 
    def wrap(args):
        if args in memory:
            return memory[args]
        memory[args]=f(args)
        return memory[args]
    return wrap

@memoize_factorial
def facto(num): 
    if num==1:
        return 1
    else :
        return num * facto(num-1)    
facto(5)

'Python' 카테고리의 다른 글

lambda , filter, map  (0) 2021.05.11
Python Generator 제너레이터, yield  (0) 2021.05.11
Global에 대하여  (0) 2021.05.11
Object-Oriented Programming  (0) 2021.05.11

+ Recent posts