python装饰器

闭包,装饰器
在一个函数内部定义一个函数,并且这个函数用到了外边函数的变量,那么这个函数和用到变量就称之为闭包,闭包返回的不仅有代码还有数据
装饰器的内核就是创建闭包,它能够在不改变原函数以及调用方式的同时,在原函数的基础上添加一些新的功能
通用装饰器:当不知道要传多少参数时,用*args,**kwargs来接受所有参数,在下面函数调用时也要用*args,**kwargs接收,此时的*args,**kwargs相当于对上面接收的参数进行解包,如果没有*号,则接收到的就是一个元组和一个字典

多个装饰器对同一个函数进行装饰的时候,哪个在最上面就先执行谁,哪个在最下面就是谁先对函数进行装饰
带参数的装饰器对函数进行装饰时,分为两步:
1.先执行最外层的函数,将装饰器的参数当做实参传递进去,跟无参数的装饰器不一样的是,此时并不会把要装饰的函数的引用传递进去,而是返回一个装饰器对目标函数进行装饰。
2.用上面返回来的装饰器对要装饰的函数进行装饰,流程同无参数的一样。

注意:跟直接根据函数的引用调用函数不同的是,用引用直接调用函数,后面跟的是实参,直接返回函数的执行结果。而装饰器里面调用引用的函数时,参数是从外面传递来的,所以要用形参接收,而定义的形参是不能直接当做实参传递的,所以要通过闭包来实现。
2.匿名函数、普通函数、闭包、面向对象的区别?
1). 匿名函数能够完成基本的简单功能,传递是这个函数的引用 只有功能。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

2). 普通函数能够完成较为复杂的功能,传递是这个函数的引用 只有功能。
3). 闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,占用资源比较小。
4). 对象能够完成最为复杂的功能,传递是数据+功能,但占用大量空间,浪费资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值