python 装饰器
装饰器
装饰器是一个函数,主要用来包装另一个函数或类,装饰器的目的在不改变原函数的情况下,对原函数进行包装,添加功能。
装饰器传入的是一个函数,返回的也是一个函数
我们先来看一个简单的函数
import time def sum1(): sum = 1+ 2 print (sum) def timeit(func): def test(): start = time.clock() func() end =time.clock() print("time used:", end - start) return test sum1 = timeit(sum1) sum1()
上面那段代码其实就实现了装饰器的功能,对sum1函数进行包装,添加了计时功能。
注意:timeit传入的是函数名,如果在函数名后面加上(),则是执行这个函数,如果只是函数名,这是传参函数。
python就提出了装饰器来降低上面字符串的输入量
import time def timeit(func): def test(): start = time.clock() func() end =time.clock() print("time used:", end - start) return test @timeit def sum1(): sum = 1+ 2 print (sum) sum1()
语法
def 装饰器函数名(参数):
语句块
return 函数对象
@装饰器函数名
def 函数名(形参列表):
语句块
1 def mydeco(fn): 2 def fx(): 3 print("=========这是myfunc调用之前==========") 4 fn() 5 print('---------这是myfunc调用之后----------') 6 return fx 7 8 @mydeco 9 def myfunc(): 10 print("myfunc被调用") 11 12 # myfunc = mydeco(myfunc) # 原理是改变原变量绑定的函数 13 14 myfunc() 15 16 #=========这是myfunc调用之前========== 17 #myfunc被调用 18 #---------这是myfunc调用之后----------
闭包
1 def yanzhen(fn): #闭包函数 2 def fx(name,x): 3 print("可以用if语句进行判断,进行验证,验证通过使用fn语句") 4 fn(name,x) 5 return fx 6 7 @yanzhen 8 def q_money(name,x): #取钱 9 print("取钱") #不写return,默认返回None 10 11 @yanzhen 12 def c_money(name,x): #存钱 13 print("存钱") 14 15 q_money("凌贤鹏",300) 16 print("-----------------------") 17 c_money("文庆华",500) 18 19 #可以用if语句进行判断,进行验证,验证通过使用fn语句 20 #取钱 21 #----------------------- 22 #可以用if语句进行判断,进行验证,验证通过使用fn语句 23 #存钱