装饰器
装饰器,是修改其他函数的功能的函数。
在原函数不修改的基础上,对原函数功能进行扩展。
无参装饰器
def wrapper(main_func): def inner(): print("login function called here.") main_func() print("log function called here.") return inner @wrapper def get_data(): print("I am getting data...") # 调用方式 get_data()
*运行结果如下:**
login function called here. I am getting data... log function called here.
运行过程分析:
1. get_data == wrapper(get_data) == inner
2. get_data()== inner()
有参装饰器
def wrapper(user, pwd):
def outer(main_func):
def inner(*args, **kwargs):
print("login function called here.user=[%s],password=[%s]" % (user, pwd))
main_func(*args, **kwargs)
print("log function called here.")
return inner
return outer
@wrapper("gfc@126.com", "123456")
def get_data(*args, **kwargs):
print("I am getting data...")
print(args)
print(kwargs)
# 调用方式
get_data("Milton", age=18)
运行结果如下:
login function called here.user=[gfc@126.com],password=[123456]
I am getting data...
('Milton',)
{'age': 18}
log function called here.
运行过程分析:
执行get_data(“Milton”,age=18)时:
get_data == wrapper("gfc@126.com","123456")(get_data)
== outer(get_data)
== inner
get_data("Milton",age=18) == inner("Milton",age=18)
- 先执行wrapper(“gfc@126.com“,”123456”), 返回outer函数
def outer(main_func): def inner(*args, **kwargs): print("login function called here.user=[%s],password=[%s]" % (user, pwd)) main_func(*args, **kwargs) print("log function called here.") return inner
- 执行outer(get_data),返回inner函数
def inner(*args, **kwargs): print("login function called here.user=[%s],password=[%s]" % (user, pwd)) main_func(*args, **kwargs) print("log function called here.")
- 执行inner(“Milton”,age=18)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。