Python闭包和装饰器用法实例详解

本文详细解析了Python中的闭包概念,包括内部函数使用外部函数变量的原理及nonlocal关键字的作用。同时,全面介绍了装饰器的功能,如日志记录、函数执行时间统计、权限校验等,并探讨了两层与三层装饰器的区别及wraps()的使用。

1、 文章详解:

https://www.jb51.net/article/161754.htm

2、闭包的概念:

1、一个函数中定义了另一个函数
2、内部函数使用了外部函数的变量
(注意此时引用只是说调用,但是不能修改,如果想在内部函数中修改 外部函数的局部变量的话必须在内部函数中加nonlocal才可以修改)
3、返回内部函数的引用(即地址)

例子:
在这里插入图片描述

3、装饰器简介

不管是三层装饰器还是两层装饰器,都是最里面的一层传递的参数是待装饰函数的参数(即*args,**kwargs),然后倒数第二层的参数是待装饰的函数名参数(即func),如果是三层的,则最外层的参数是装饰器(@decorator)的传入的外部参数

wraps()
Python装饰器在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生变化),为了不影响,Python中functools包中提供了一个叫wraps的decorator来消除这样的副作用

两层装饰器:
在这里插入图片描述

三层装饰器:

在这里插入图片描述

4、装饰器功能

  1. 引入日志
  2. 函数执行时间统计
  3. 执行函数前预备处理
  4. 执行函数后清理功能
  5. 权限校验等场景
  6. 缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值