참조 : 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 |