TA的每日心情 | 无聊 2024-7-12 13:16 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]测试小兵
|
1:装饰器 :不改变被装饰的函数情况下附加一些功能
本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动
例1:计算运行时长
- import time
- def hx(f): #装饰器的函数,f接受被装饰的函数名
- def neibu(): #装饰内部函数
- start=time.time()
- f() #调用被装饰的函数
- end=time.time()
- print(end-start)
- return neibu #装饰器返回内部函数。(内部代表的是包装盒)
- @hx #@加函数名,代表下面的函数被hx装饰
- def jisuan():
- print('12143')
- jisuan()
复制代码
例2:
- import time
- def dd(func):
- def nb(cs):
- print('**')
- func(cs)
- print('**')
- return nb
- def cc(func):
- def nb(cs):
- print('#########')
- func(cs)
- print('#########')
- return nb
- @cc
- @dd
- def ych(name):
- print(name,'开演唱会')
- ych('周杰伦')
复制代码
输出:
#########
**
周杰伦 开演唱会
**
#########
2,闭包
闭包三条件。装饰器里有闭包
1包含内部函数的函数
2内部函数使用了外部函数的变量
3返回内部函数名
- def hanshu(b): #1,包含内部函数的函数
- a=3
- def nb(c): #闭包
- d=a*b+c # 3,内部函数使用了外部函数的变量
- return d
- return nb #2,返回内部函数名
- x=hanshu(4)
- print(x(5))
- print(x(6))
- print(hanshu(4)(5)) #输出17 4为外部函数变量 ,5 为内部函数变量
复制代码
输出:
17
18
17 |
|