一、内容回顾作业讲解
1、匿名函数 一句话函数,多与内置函数,列表推导式结合
2、内置函数:min max sorted 、map reduce、bytes
3、闭包:
-
一定是函数嵌套在函数中
-
内层函数对外层函数的非全局变量的使用
-
作用:保证数据安全,自由变量不会在内存中消失,而且全局引用不到
二、装饰器
1、开放封闭原则
-
开放:对代码的拓展开放
-
封闭:对源码的修改是封闭的
-
在不改变原函数的代码及调用方式的前提下,为其增加新的功能
装饰器的本质就是闭包
"""
装饰器基本格式
"""
import time
def index():
time.sleep(3)
print("欢迎登录博客园首页!")
def func(f):
def inner():
start_time = time.time()
f()
end_time = time.time()
print(f'测试效率时间差:{end_time-start_time}')
return inner
index = func(index) # func(index) 得到的是 inner
index()
被装饰函数不带返回值
import time
def func(f):
def inner():
start_time = time.time()
f()
end_time = time.time()
print(f'测试效率时间差:{end_time-start_time}')
return inner
@func #等价于index = func(index)
def index():
time.sleep(3)
print("欢迎登录博客园首页!")
index()
被装饰器带返回值
import time
def func(f):
def inner():
start_time = time.time()
r = f()
end_time = time.time()
print(f'测试效率时间差:{end_time-start_time}')
return r
return inner
被装饰器参数
import time
def func(f):
def inner(*args,**kwargs):
start_time = time.time()
r = f(*args,**kwargs)
end_time = time.time()
print(f'测试效率时间差:{end_time-start_time}')
return r
return inner
def wrapper(f):
def inner(*args,**kwargs):
"""添加额外的功能,执行被装饰函数之前的操作"""
ret = f(*args,**kwargs)
"""添加额外的功能,执行被装饰函数之后的操作"""
return ret
return inner