网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月31日漏签0天
开课吧python吧 关注:364贴子:4,064
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 18回复贴,共2页
  • ,跳到 页  
<<返回开课吧python吧
>0< 加载中...

【开课吧python】Python装饰器的实现和万能装饰器

  • 只看楼主
  • 收藏

  • 回复
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在Python中,装饰器是在不改变已有函数的代码的前提下,给函数增加新的功能的一种函数。
装饰器接收一个函数作为参数,返回值也是一个函数。
在Python中,实现装饰器的方式叫做闭包。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一、闭包的实现
闭包是指函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。


2025-07-31 21:00:18
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
闭包的使用,可以隐藏内部函数的工作细节,只给外部使用者提供一个可以执行的内部函数的引用。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行结果:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
闭包的重点:
1.外函数的内部定义了一个内函数。
2.内函数使用了外函数的临时变量。
3.外函数的返回值是内函数的引用。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在上面的代码中,外函数是outer_func,在他的内部有内函数inner_func,a是外函数的临时变量,在内函数中使用了a,外函数的返回值是内函数inner_func。
如果在内部函数中直接使用外部函数的变量a时,不改变a的值,直接使用就可以了,如果要修改a的值,需要将变量声明为nonlocal。
内部函数可以接收参数,然后在内函数里使用参数。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
使用func接收outer_func()的返回值,返回的值func是一个函数,相当于inner_func,给func()传入参数并执行,则会运行inner_func中的代码。
也可以不使用变量来接收,而是在outer_func()后面直接传参和执行,后面有两个小括号:outer_func()(),第二个括号中传入内函数的参数。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二、装饰器实现及使用


2025-07-31 20:54:18
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行结果:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
装饰器是通过闭包的方式实现的,外函数接收一个函数作为外函数的临时变量,然后在内函数中执行这个函数。
内函数将需要的参数接收进来并传给执行的函数,然后将执行结果返回。在内函数中,可以添加额外的功能的代码,这些额外的功能就是装饰器添加的功能。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最后外函数将内函数返回。
使用装饰器来装饰函数时,在被装饰的函数的前一行,使用@装饰器函数名的形式来装饰,则函数本身的功能正常实现,装饰器中添加的功能也实现了。如上面代码中打印被装饰函数的函数名。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
三、多个装饰器同时装饰一个函数


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行结果:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以看到,当多个装饰器装饰同一个函数时,会是一个嵌套的装饰结果,也就是说,先执行完离函数近的一个装饰器,然后再用离函数远的装饰器来装饰执行结果。


2025-07-31 20:48:18
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
四、万能装饰器
装饰器的外函数会接收一个函数作为参数,这个函数在内函数内部执行,这个函数可以有参数也可以没有参数,可以有返回值也可以没有返回值。
所以装饰器也分为四类,无参无返回值、无参有返回值、有参无返回值、有参有返回值。是否有参数和返回值完全取决于被装饰的函数。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 18回复贴,共2页
  • ,跳到 页  
<<返回开课吧python吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示