函数式编程

2018-11-27  本文已影响0人  pubalabala
函数过程

过滤: filter() ---> 映射: map() ---> 归约: reduce()

functools.reduce(lambda x, y: x * y, range(1, 6))

自定义装饰器 - 修饰函数/装饰类 - 设计模式(代理模式)
代理模式 -
用代理 对象(装饰器函数)去执行被代理对象(被装饰的函数)的行为
面向切面编程 - AOP
程序中跟正常业务逻辑没有必然联系而且会重复使用的功能通常被称为横切关注功能, 这种横切关注功能不应该卸载业务逻辑代码上, 而应该使用装饰器或中间件来完成

装饰器
# 计算函数执行时间的装饰器
def decorate(func):

    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time()
        ret_value = func(*args, **kwargs):
        print(func.__name__, time() - start)
        return ret_value
    return wrapper

# 带参数的装饰器
def record_time(output):

    def decorate(func):

        @wraps(func)
        def wrapper(*args, **kwargs):
            start = time()
            ret_value = func(*args, **kwargs):
            output(func.__name__, time() - start)
            return ret_value

        return wrapper

    return decorate


# 装饰器的其他写法
class RecordTime(object):
    def __init__(self, output):
        self.output = output

    def __call__(self, func):

        @wraps(func)
        def wrapper(*args, **kwargs):
            start = time()
            ret_value = func(*args, **kwargs)
            output(func.__name__, time() - start)
            return ret_value
        
        return wrapper
上一篇 下一篇

猜你喜欢

热点阅读