学习之什么是装饰器

什么是装饰器

本质:就是一个函数,能为其它的函数增加额外功能
在这里插入图片描述

# 目标函数
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2
"""
额外的功能能统计目标函数执行的耗时
"""
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    start_time = time()
    total = 0
    for i in range(1, n+1):
        total += i ** 2
    end_time = time()
    print("函数执行的耗时:{}".format(end_time - start_time))
    return total

if __name__ == '__main__':

    print(power_num(30000000))
# 定义装饰函数--能统计目标函数执行的耗时
def elapsed_time(func):
    """能统计目标函数执行的耗时"""

    def decorated(*args, **kwargs):
        start_time = time()
        # 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
        result = func(*args, **kwargs)
        end_time = time()
        print("函数执行的耗时:{}".format(end_time - start_time))
        return result

    return decorated


# 目标函数
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2

    return total


if __name__ == '__main__':
    # 调用装饰函数去装饰目标函数,返回被装饰后的函数  相当于在目标函数上添加@elapsed_time
    # 对目标函数进行elapsed装饰器函数的调用,返回一个装饰后的名字还是叫power_num的函数
    power_num = elapsed_time(power_num)
    print(power_num(30000000))
# 装饰函数需要传入参数
def elapsed_pre(pre):
    """装饰函数需要传入参数"""

    def elapsed_time(func):
        """能统计目标函数执行的耗时"""

        def decorated(*args, **kwargs):
            start_time = time()
            # 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
            result = func(*args, **kwargs)
            end_time = time()
            print("函数执行的耗时:{}".format(round((end_time - start_time), pre)))
            return result

        return decorated

    return elapsed_time


# 目标函数
@elapsed_pre(3)
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2

    return total


if __name__ == '__main__':
	print(power_num(30000000))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值