|
一、装饰器的引入
1.目标: 给源代码加功能;
2.实现原则:遵守开放封闭原则。封闭以实现的功能代码块;对功能的扩展开放。
二、实现方式
1.装饰器精髓(就两句话):
格式:@函数名
1)解释器碰到装饰器的@符号时,自动执行outer()函数,并将t1当做参数传入outer函数中;
2)将outer的返回值inner赋值给t1函数;
*如果两句话也记不住的话,就记一句: t1变成了inner函数
def outer(func):
def inner():
print("before")
ret = func() #先执行func()函数,然后将返回值赋值给ret。
print("after")
return ret
return inner
@outer
def t1():
print("hehe")
2.装饰器的参数问题:
因为inner函数和t1函数是对应的,所以如果t1有参数的话,应该写在inner函数上。
*outer函数的参数是func 这个参数,inner的参数是原函数的参数。
3.普通装饰器的通用写法(含参):
def outer(func):
def inner(*args,**kwargs):
print("before")
ret = func(*args, **kwargs) #先执行func()函数,然后将返回值赋值给ret。
print("after")
return ret
return inner
@outer
def t1(a,b):
print(a,b)
print("hehe")
4.装饰器最常见的一种用法:

5.关于双层装饰器:

|
|
|