闭包
- 函数嵌套, 即外部函数嵌套一个内部函数;
- 外部函数返回内部函数引用;
- 内部函数使用外部函数的变量或者形参
# 简单演示
# def f1(x):
#
# def f2():
# print(x)
#
# return f2
装饰器
装饰器:不修改被装饰对象的源代码,也不修改调用方式的前提下,给被装饰对象添加新的功能
- 装饰器
- 器:器具,工具
- 装饰:为其他事物添加额外的功能
- 定义一个函数,这个函数的功能就是用来装饰其他函数的
- 也就是说这个函数是用来给其他函数添加额外的功能的
def inner(name):
print(name)
print('原来函数')
# 增加统计程序运行时间的功能
def outer(func):
# func = inside
def wrapper(*args, **kwargs):
import time
start = time.time()
func(*args, **kwargs)
time.sleep(1)
end = time.time()
print('所用时间:',end-start)
return wrapper
# 调用:先用装饰器装饰一下,然后调用
inner = outer(inner)
inner('aaaa')
# 增加统计程序运行时间的功能
def outer(func):
# func = inside
def wrapper(*args, **kwargs):
import time
start = time.time()
func(*args, **kwargs)
time.sleep(1)
end = time.time()
print('所用时间:',end-start)
return wrapper
# 语法糖 必须装饰器写好了才可以,直接装饰需要装饰的函数
@outer # 相当于 inner = outer(inner)
def inner(name):
print(name)
print('原来函数')
# 调用:使用语法糖就可以直接调用
inner('aaaa')
# 可能上边写的有返回值,但是经过装饰,返回值找不到了
# 还是有变化、
# 所以完美的模板应该如下
def outer(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
# 想要添加功能,在模板里添加
标签:闭包,函数,python,inner,func,time,装饰,def
From: https://www.cnblogs.com/fhy-blog/p/16625414.html