python的学习之路(十一)——装饰器

本文深入探讨Python装饰器的功能和原理,通过实例展示了如何定义和使用装饰器,包括无参数和带参数的装饰器。同时,阐述了装饰器如何处理原函数参数,并演示了装饰器在实际应用中的多重装饰和复用。最后,讨论了装饰器的参数传递,以及它们在代码组织和功能增强中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、装饰器的功能

在不改变原函数的情况下,对原函数的功能进行增强和扩展。

2、装饰器的原理

闭包;嵌套函数,内层函数可以引用外层函数的变量

一定返回的是内层函数的引用

3、定义装饰器

装饰器不传参情况


def test():
    print("这是我的原始功能")

def  test_plus(func):
    def data():
        func()
        print("这是我的新增功能")
    return data

data = test_plus(test)
data()
def  test_plus(func):
    def data():
        func()
        print("这是我的新增功能")
    return data

@test_plus
def test():
    print("这是我的原始功能")

test()

使用语法糖@

4、原函数传参

#原函数传参
#func:原函数      在装饰器中为自由变量
def log(func):
    def log_wrapper(*args, **kwargs):
        func(*args, **kwargs)
    return log_wrapper

@log
def test(arg1, arg2):    #定义传递参数类型与个数
    print("args" ":", arg1, arg2)

test(1, 2)  #调用函数并且传参

#不使用语法糖情况
# log_wrapper = log(test)
# test(1, 2)
args: 1 2

5、装饰器的传参

装饰器一般具有三个函数,要注意关注返回值

建议:写装饰器是时先写返回值

def test_puls(level="INFO"):
    def log(func):
        def log_wrapper():
            print(f"This is {level} log ")  #lever为装饰器中自由变量
        return log_wrapper
    return log

# 装饰器解析
#test_plus函数返回了log函数,log函数返回了log_wrapper,log_wrapper返回了func
# func即为被装饰函数test
@test_puls("Error")
def test():
    print("这是装饰器传参")

test()
#不使用语法糖情况
# log = test_puls("Error")
# log_wrapper = log(test)
# log_wrapper()

#流程解析:首先"Error"传参给level,test_plus函数返回了log函数,log函数返回了log_wrapper,log_wrapper返回了func(即test函数)
This is Error log 

6、装饰器的应用

一个函数可以有多个装饰器(即添加多个功能)

一个装饰器也可以安装在多个函数上(即多个函数具有同一个装饰器功能)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值