python装饰器

功能

拓展原函数功能的一种函数返回值也是一个函数,不改变原函数代码的提前下增加新功能

1.嵌套函数

import time

def deco(func):
    start = time.time()
    func()
    end = time.time()
    time_cha = end - start
    print(f"共耗时{time_cha}s")

def func1():
    print("开始学习",end="")
    time.sleep(2)
    print("装饰器")

if __name__ == '__main__':
    deco(func1)

2.闭包函数

一个函数,参数和返回值都是函数

  • 增强函数功能
  • 面向切面编程
import time

"""闭包,用于增强函数,给func增加统计时间的功能"""

# 入参为函数
def deco(func):
    def improve_func():
        start = time.time()
        func()
        end = time.time()
        time_cha = end - start
        print(f"共耗时{time_cha} s")

    # 出参为函数
    return improve_func


def func1():
    print("开始学习", end="")
    time.sleep(2)
    print("装饰器")


if __name__ == '__main__':
    # 调用deco()增加函数
    func1 = deco(func1)
    func1()

3.语法糖

计算机语言中添加的某种语法,不影响功能,简化代码书写

import time

"""闭包,用于增强函数,给func增加统计时间的功能"""

# 入参为函数
def deco(func):
    def improve_func():
        start = time.time()
        func()
        end = time.time()
        time_cha = end - start
        print(f"共耗时{time_cha} s")

    # 出参为函数
    return improve_func

@deco
def func1():
    print("开始学习", end="")
    time.sleep(2)
    print("装饰器")


if __name__ == '__main__':
    # 调用deco()增加函数
    func1()

"""
func1 = improve_func() # func=func1
"""
  • 函数有返回值 +++
  • 函数传参 ***
import time

def deco(func):
    def improve_func(*args,**kwargs):# ***
        start = time.time()
        res = func(*args,**kwargs)# +++ ***
        end = time.time()
        time_cha = end - start
        print(f"共耗时{time_cha} s")
        return res# +++
    return improve_func

@deco
def func1(pause_time):
    print("开始学习", end="")
    time.sleep(pause_time)
    print("装饰器")
    return print("学习完毕")

if __name__ == '__main__':
    func1(2)

4.多个装饰器

import time

def deco(func):
    def improve_func(*args,**kwargs):# ***
        start = time.time()
        res = func(*args,**kwargs)# +++ ***
        end = time.time()
        time_cha = end - start
        print(f"共耗时{time_cha} s")
        return res# +++
    return improve_func

def deco1(func):
    def improve_func(*args,**kwargs):# ***
        print("新的一天开始了!")
        res = func(*args,**kwargs)# +++ ***
        print("明天学习web自动化 !")
        return res# +++
    return improve_func

@deco
@deco1
def func1(pause_time):
    print("开始学习", end="")
    time.sleep(pause_time)
    print("装饰器")
    return print("学习完毕")

if __name__ == '__main__':
    func1(2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值