python 装饰器

本文通过多个实例详细介绍了Python装饰器的应用技巧,包括无参装饰器、带参数的装饰器及多重装饰器等,并展示了如何利用装饰器在不修改原始函数的基础上增加额外功能。

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

一般在开发过程中,要遵循开放封闭原则(OCP),虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展

装饰器:在不改变源代码的情况下,对原来的代码进行扩充

1.下面是一个简单的装饰器

t2在不改变t1的情况下为t1增加了两行输出

def t2(fn):
    def t3():
        print("+++++++++++++++++++++")
        fn()
        print("=====================")
    return t3
@t2
def t1():
    print("---------------------")

t1()

结果如下:

+++++++++++++++++++++
---------------------
=====================
2.被装饰函数有参数:
def logging(fn):
    def inner(name):
        print("%s 是我女朋友" % name)
        fn(name)
    return inner


@logging
def login(name):
    print("我和%s去年刚结婚" % name)

login("XXX")

运行结果如下:

XXX 是我女朋友
我和XXX去年刚结婚
3.装饰器带参数

带参数的装饰 可以看成两个装饰器 b2下的函数块是一个装饰器 b1的函数块又可以看成一个装饰器 

def b1(con1):
    print("来看看传入的参数是什么\n %s"%con1)
    def b2(fn):
        def b3(con3):
            print("这是装饰器里的函数,参数和b4一样,参数是%s" % con3)
            fn(con3)
        return b3
    return b2

@b1("我是李云龙")
def b4(con2):
    print("我是被装饰函数 传入参数是%s"%con2)

b4("谁是二嘎子")

运行结果是:

来看看传入的参数是什么
 我是李云龙
这是装饰器里的函数,参数和b4一样,参数是谁是二嘎子
我是被装饰函数 传入参数是谁是二嘎子
4.多个装饰器
def t1(fn):
    print("你愁啥?")
    def inner():
        print("瞅你咋地")
        fn()
        print("..")
    return inner

def t2(fn):
    def inner():
        print("您在瞅一下试试")
        fn()
        print("hehe")
    return inner


@t1
@t2
def t3():
    print("试试就试试")

t3()

运行结果如下:

你愁啥?
瞅你咋地
您在瞅一下试试
试试就试试
hehe
..
5. 装饰器在函数中的应用

在if...else...语句中

def logging(fn):
    t=input("请输入")
    if t == "1":
        def inner(userName, password):
            print("该修空调了 %s %s"%(userName, password))
            fn(userName, password)
            print("说不需要")
        return inner

    elif t == "2":
        def inner(userName, password):
            print("需要我修空调吗? %s %s"%(userName, password))
            fn(userName, password)
            print("说需要")
        return inner



@logging
def login(userName, password):
    print(userName, password)
    print("笑着")

login("隔壁的","老王" )

运行结果如下:

请输入1
该修空调了 隔壁的 老王
隔壁的 老王
笑着
说不需要





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值