'''
理解装饰前先理解python闭包的概念:https://www.cnblogs.com/s-1314-521/p/9763376.html
下面是对装饰器的简单举例
'''
'''
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(inner)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动
'''
# 被装饰的函数无参数
def decorate(func):
'''
装饰器打印出执行方法的名字
:paramfunc: 方法的引用。可以这样理解 a=1,1在内存地址中,a是对1的引用。同样的func就是对func()的引用,不带()就是对方法的引用(里面还有一些属性,func.__name__等等),带()就是表示要执行这个方法
:return:
'''
def inner():
print('执行的方法名:', func.__name__)
func()
return inner
# 被装饰的函数有参数
def decorate_arg(func):
def inner(a, b):
print('执行的方法名:', func.__name__)
func(a, b)
return inner
@decorate
def good_bye():
print('say good_bye')
@decorate_arg
def add_num(a, b):
print(a + b)
if __name__ =='__main__':
good_bye()
print('------')
add_num(1, 2)
打印结果:
执行的方法名: good_bye
say good_bye
------------
执行的方法名: add_num
3
网友评论