Python:装饰器 ,闭包
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('**')
returnnb
def cc(func):
def nb(cs):
print('#########')
func(cs)
print('#########')
returnnb
@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)) #输出174为外部函数变量 ,5 为内部函数变量
输出:
17
18
17 支持分享
页:
[1]