51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1935|回复: 1
打印 上一主题 下一主题

[资料] Python:装饰器 ,闭包

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-2 14:32:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1:装饰器 :不改变被装饰的函数情况下附加一些功能
本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能
实质: 是一个函数
    参数:是你要装饰的函数名(并非函数调用)
    返回:是装饰完的函数名(也非函数调用)
    作用:为已经存在的对象添加额外的功能
    特点:不需要对对象做任何的代码上的变动

例1:计算运行时长
  1. import time
  2. def hx(f):  #装饰器的函数,f接受被装饰的函数名
  3.     def neibu(): #装饰内部函数
  4.         start=time.time()
  5.         f() #调用被装饰的函数
  6.         end=time.time()
  7.         print(end-start)
  8.     return neibu #装饰器返回内部函数。(内部代表的是包装盒)
  9. @hx #@加函数名,代表下面的函数被hx装饰
  10. def jisuan():
  11.     print('12143')
  12. jisuan()
复制代码


例2:
  1. import time
  2. def dd(func):
  3.     def nb(cs):
  4.         print('**')
  5.         func(cs)
  6.         print('**')
  7.     return  nb
  8. def cc(func):
  9.     def nb(cs):
  10.         print('#########')
  11.         func(cs)
  12.         print('#########')
  13.     return  nb
  14. @cc
  15. @dd
  16. def ych(name):
  17.     print(name,'开演唱会')
  18. ych('周杰伦')
复制代码

输出:
#########
**
周杰伦 开演唱会
**
#########

2,闭包
闭包三条件。装饰器里有闭包
1包含内部函数的函数
2内部函数使用了外部函数的变量
3返回内部函数名
  1. def hanshu(b): #1,包含内部函数的函数
  2.     a=3
  3.     def nb(c): #闭包
  4.         d=a*b+c # 3,内部函数使用了外部函数的变量
  5.         return d
  6.     return nb #2,返回内部函数名
  7. x=hanshu(4)
  8. print(x(5))
  9. print(x(6))
  10. print(hanshu(4)(5))   #输出17  4为外部函数变量 ,5 为内部函数变量
复制代码

输出:
17
18
17
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-26 17:13 , Processed in 0.066704 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表