在讲装饰器之前,要知道以下知识点
一、储备知识点
1.*args,**kwargs
def index(x,y):
print(x,y)
def wrapper(*args,**kwargs):
index(*args,**kwargs) #index(y = 222,x = 111)
wrapper(y = 222, x = 111)
2.名称空间与作用域:名称空间的‘嵌套’关系是在函数定义阶段,即检测语法的时候确定的。
3.函数对象
可以把函数当做参数传入
可以把行数当做返回值返回
def index():
pass
def foo(func):
return func
foo(index)
#不要加括号,加括号是先运行了inndex了,不要加括号!不加括号代表的是传的是函数
4.函数的嵌套定义
def outter(func):
def wrapper():
pass
return wrapper
闭包函数
def outter():
x = 111
def wrapper():
x
return wrapper #重新回到全局
f =outter()
传参的方式一:通过参数的形式为函数体传值
def wrapper():
print(1)
print(2)
print(3)
x
传参的方式二:通过闭包的函数体传值
1.
def outter(x):
#x=1
def wrapper():
print(1)
print(2)
print(3)
x
return wrapper
#return outter内的wrapper那个函数的内存地址
f1 = outter(1)
f2 = outter