Python学习之装饰器
http://www.cnblogs.com/linhaifeng/articles/6140395.html
装饰器:本质就是函数,功能是为其他函数添加附加功能
原则:1.不修改被修饰函数源代码
2.不修改被修饰函数的调用方式
装饰器=高阶函数+函数嵌套+闭包
闭包:在一个作用域里放入定义变量,相当于打了一个包

高阶函数定义:
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
3.满足上述条件任意一个,都可称之为高阶函数
装饰器的基本框架:
1 import time 2 def timmer(func): 3 def wrapper(): 4 print(func) 5 func() 6 return wrapper 7 8 def test(): 9 time.sleep(0.5) #为了看执行效果引入time延时 10 print('test函数运行完毕') 11 12 test() 13 res=timmer(test) #返回的是wrapper的地址 14 res() #执行的是wrapper() 15 16 test=timmer(test) #返回的是wrapper的地址 17 test() #执行的是wrapper() 18 输出: 19 test函数运行完毕 20 <function test at 0x0000008305B24158> 21 test函数运行完毕 22 <function test at 0x0000008305B24158> 23 test函数运行完毕
#这就是一个实现一个装饰器最基本的架子
def timmer(func):
def wrapper():
print(func)
func()
return wrapper
加上参数:
1 def timer(func):
2 def wrapper(*args,**kwargs):
3 func(*args,**kwargs)
4 return wrapper
加上功能:
import time
def timer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
func(*args,**kwargs)
stop_time=time.time()
print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
return wrapper
加上返回值:
import time
def timer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
return res
return wrapper
使用装饰器:
def cal(array):
res=0
for i in array:
res+=i
return res
cal=timer(cal)
cal(range(10))
语法糖@:
@timer #@timer就等同于cal=timer(cal)
def cal(array):
res=0
for i in array:
res+=i
return res
cal(range(10))
'''这是第一种赋值方法,采用第三方变量''' c = a a = b b = c '''使用两个变量''' a = a+b #取两个数的和 b = a-b #然后a-b等于a然后赋值给b a = a-b #然后a-b等于b然后赋值给a,完成值的交换 使用两个变量的另一种方法: a,b = b,a
行走世间,全是妖怪

浙公网安备 33010602011771号