闭包
作用:使函数外部能访问函数内部局部变量,且当函数完后依然可以保存该变量
**特征:**函数内部嵌套,内部函数访问外部函数局部变量,外部函数返回内部函数地址(或者直接调用内部函数)
def a():
num=4
def f():
print(num)
return f
b=a()
b()
或者
def a():
num=4
def f():
print(num)
f()
b=a()
装饰器
**作用-**在不修改原函数的基础上扩展该函数
**特征-**装饰器函数嵌套,外部装饰器函数参数为需扩展的函数地址,返回值为内部函数地址,内部函数参数为需扩展的函数的参数,内容为添加内容加调用原函数
def a():
print("----------我是一个a-----------")
def b(func):
def adoner():
print("----------begin-----------")
func()
print("----------end-----------")
return adoner
b(a)()
带参数的:
def a(s):
print("----------我是一个%s-----------"%s)
def b(func):
def adoner(s):
print("----------begin-----------")
func(s)
print("----------end-----------")
return adoner
b(a)("s")
带动态参数的:
def a(w,a,b):
s=w+a+b
print("----------"+s+"-----------")
def b(func):
def adoner(*args,**kwargs):
print("----------begin-----------")
func(*args,**kwargs)
print("----------end-----------")
return adoner
b(a)("wo","shi","s")