标签:and 实现 mil python turn 函数名 str lex 16px
一.装饰器
1.什么是装饰器.
装饰器即函数
装饰即修饰,意指为其他函数添加新功能
装饰器定义:本质就是函数,功能是为其他函数添加新功能
2.装饰器需要遵循的原则.
1.不修改被装饰函数的源代码(开放封闭原则)
2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式
3.装饰器的实现本质.
装饰器=高阶函数+函数嵌套+闭包
4.高阶函数
高阶函数定义:
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
3.满足上述条件任意一个,都可称之为高阶函数
高阶函数示范:
def foo():
print(‘我的函数名作为参数传给高阶函数‘)
def gao_jie1(func):
print(‘我就是高阶函数1,我接收的参数名是%s‘ %func)
func()
def gao_jie2(func):
print(‘我就是高阶函数2,我的返回值是%s‘ %func)
return func
gao_jie1(foo)
gao_jie2(foo)
把函数当做参数传给高阶函数
#高阶函数应用1:把函数当做参数传给高阶函数
import time
def foo():
print(‘from the foo‘)
def timmer(func):
start_time=time.time()
func()
stop_time=time.time()
print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time))
timmer(foo)
#总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),
现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式
函数返回值是函数名:
#高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名
import time
def foo():
print(‘from the foo‘)
def timmer(func):
start_time=time.time()
return func
stop_time=time.time()
print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time))
foo=timmer(foo)
foo()
#总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能
高阶函数总结
1.函数接收的参数是一个函数名
作用:在不修改函数源代码的前提下,为函数添加新功能,
不足:会改变函数的调用方式
2.函数的返回值是一个函数名
作用:不修改函数的调用方式
不足:不能添加新功能
5.嵌套函数
def father(name):
print(‘from father %s‘ %name)
def son():
print(‘from son‘)
def grandson():
print(‘from grandson‘)
grandson()
son()
father(‘fangshiqi‘)
6.闭包
闭包:在一个作用域里放入定义变量,相当于打了一个包
def father(name):
def son():
# name=‘alex‘
print(‘我爸爸是 [%s]‘ %name)
def grandson():
# name=‘wupeiqi‘
print(‘我爷爷是 [%s]‘ %name)
grandson()
son()
father(‘fangshiqi‘)
7.无参装饰器
无参装饰器=高级函数+函数嵌套
基本框架
#这就是一个实现一个装饰器最基本的架子
def timer(func):
def wrapper():
func()
return wrapper
加上参数
def timer(func):
def wrapper(*args,**kwargs):
func(*args,**kwargs)
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
使用装饰器
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))
标签:and 实现 mil python turn 函数名 str lex 16px
原文地址:http://www.cnblogs.com/fangshiqi/p/6408223.html