装饰器很牛逼的,果断要学会
要理解闭包是什么,我举个例子来说
def outer():
x = 10
def inner(): #条件1:inner是内部函数
print(x) #条件2:x是外部的变量(不是inner作用域的变量)
return inner #结论:inner就是一个闭包(用来return的)
以下是装饰器的解释(用例子)
import time
def show_time(f):
def inner(x,y,z,w):
start = time.time()
time.sleep(2)
f(x,y,z,w)
end = time.time()
print('spend %s' % (end - start))
return inner #这里是一个闭包函数
@show_time #这个函数的意思就是add=show_time(add) (类似迭代)
def add(a,b,c,d):#函数二
e=a+b+c+d
print(e)
add(1,2,3,4)#直接调用add(1,2,3,4) 就像是add=show_time(add(1,2,3,4))
输出
10
spend 2.0001144409179688
装饰器的作用就是,在不改变函数的基础上,可以给函数加功能的。
这个例子:本来只有print('spend %s' % (end - start))的功能,现在加了一个add()的功能。装饰器果然很牛逼