装饰器
Posted liangying666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。
# 装饰器: # 开闭原则(开放封闭原则):对添加功能开放,对修改代码封闭 #举个例子,给一个函数,在不修改原来代码的基础上,添加新功能。 #无参数无返回值 def func(): print(‘捏泥人,吹口气‘) #装饰器 - 如果天气干燥,需要加水 def wrapper(fn): def inner(): print(‘加水‘) fn() return inner #返回inner这个函数地址 # fun = wrapper(func) #inner这个函数地址 # fun() #调用inner函数 #但是我们不能把功能名字改了,所以 func = wrapper(func) # 我们还用原来的名字替换 func() #有参数无返回值 def func(name,name1): print(‘你好‘,name,name1) def wrapper(fn): def inner(*args,**kwargs): # 聚合 fn(*args,**kwargs) #打散 print(‘我想和你做朋友‘,args) return inner func = wrapper(func) #inner func(‘Tom‘,‘Jenny‘) # 有参数有返回值 def func(name,name1): print(‘你好‘,name,name1) return name def wrapper(fn): def inner(*args,**kwargs): # 聚合 name = fn(*args,**kwargs) #打散 接收原函数的返回值 print(‘我想和你做朋友‘,args) return name return inner func = wrapper(func) #inner print(func(‘Tom‘,‘Jenny‘)) #返回值为name def wrapper(fn): def inner(*args,**kwargs): # 聚合 name = fn(*args,**kwargs) #打散 接收原函数的返回值 print(‘我想和你做朋友‘,args) return name return inner @wrapper # 语法糖 相当于 func = wrapper(func) def func(name,name1): print(‘你好‘,name,name1) return name #总结 def wrapper(fn): def inner(*args,**kwargs): 目标函数之前要做的操作 re = fn(*args,**kwargs) re为返回值 目标函数之后要做的操作 return re return inner 在要用装饰器的函数前加上 @wrapper(语法糖)
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章