py decorator_pattern.md

# coding: utf8
"""
装饰器模式: 无需子类化实现扩展对象功能问题
"""

from functools import wraps


def memoize(fn):
    known = dict()

    # wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择
    @wraps(fn)
    def memoizer(*args):
        if args not in known:
            known[args] = fn(*args)
        return known[args]
    return memoizer


@memoize
def fibonacci(n):
    assert(n >= 0), 'n must be >= 0'
    return n if n in (0, 1) else fibonacci(n-1) + fibonacci(n-2)

仅供参考
目录