闭包:在函数内部再定义一个函数
装饰器(基于闭包):在一个函数前后等动态添加代码,类似拦截器,过滤器
# 闭包
def sum(a):
def add(b):
return a+b
return add
number = sum(2)
print(number(1)) # 3
# 用闭包实现一个计数器
def counter(FRIST=0):
cnt = [FRIST]
def add():
cnt[0] += 1
return cnt[0]
return add
num1 = counter()
print(num1()) # 1
print(num1()) # 2
# 用闭包定义一个线性方程 a*x + b = y
# 定义一个线性方程 a*x + b = y
def a_line(a, b):
return lambda x: a*x+b
func = a_line(3, 5)
print(func(5)) # 20
print(func(8)) # 29
# 装饰器
# 用闭包定义一个装饰器
def timmer(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print("运行时间为%s秒" % (stop_time-start_time))
return wrapper
# 装饰器的使用
@timmer
def i_can_sleep():
time.sleep(3)
i_can_sleep() # 运行时间为3.004765748977661秒