python 装饰器

装饰器是程序开发中经常会⽤到的⼀个功能,⽤好了装饰器,开发效率如⻁
添翼,所以这也是Python⾯试中必问的问题,但对于好多初次接触这个知识
的⼈来讲,这个功能有点绕,⾃学时直接绕过去了,然后⾯试问到了就挂
了,因为装饰器是程序开发的基础知识,这个都不会,别跟⼈家说你会
Python

在学习装饰器之前,请务必掌握闭包

先举一个简单的例子:

# 闭包函数
def w1(func):     # func是一个函数的引用
    print("执行w1函数")
    def inner():
        print("执行inner函数")
        func()   # 执行func函数
    return inner     # 将inner作为引用函数返回

def f2():
    print("执行f2函数")
    
fun = w1(f2)    # 将f2的引用当做参数传入w1函数中,并用fun接收返回值,此时fun是引用函数
fun()    # 执行fun函数

输出结果:
执行w1函数
执行inner函数
执行f2函数     

还可以这么写:

def w1(func):     # func是一个函数的引用
    print("执行w1函数")
    def inner():
        print("执行inner函数")
        func()   # 执行func函数
    return inner     # 将inner作为引用函数返回

@w1
def f1():
    print("执行f1函数")

f1()    # 调用函数

输出结果:
执行w1函数
执行inner函数
执行f1函数

@w1这种写法是python中的一种语法糖
可以理解为将f1函数作为参数传入w1函数中

被装饰的函数带有参数时

# 闭包函数
def w1(func):     # func是一个函数的引用
    print("执行w1函数")
    def inner(a,b):
        print("执行inner函数")
        func(a,b)   # 执行func函数
    return inner     # 将inner作为引用函数返回

@w1
def f1(a,b):
    print("a+b=",a+b)

f1(1,1)    # 调用函数

输出结果:
执行w1函数
执行inner函数
a+b= 2

区别在于如果被修饰函数带有参数,那么inner函数也要带有相应的参数
上述代码也可以理解成:

fun = w1(f1)    # 将f1的引用当做参数传入w1函数中,并用fun接收返回值,此时fun是引用函数
fun(a,b)    # 执行fun函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值