51Testing软件测试论坛

标题: Python:装饰器 ,闭包 [打印本页]

作者: 乐哈哈yoyo    时间: 2019-4-2 14:32
标题: Python:装饰器 ,闭包
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
作者: Miss_love    时间: 2020-12-30 17:00
支持分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2