标签:display 分享 运行时间 作用域 作用 返回 style lex logs
器即函数
装饰即修饰,意指为其他函数添加新功能
装饰器定义:本质就是函数,功能是为其他函数添加新功能 #装饰器本身就是函数,被装饰的也是函数。
为什么要用装饰器:
及开放封闭原则。
代码上线后,就是为了尽量避免修改,不修改原函数的源代码和调用方式。 # 函数及定义和使用。
在被装饰上的正上方写一个@,它会把@这一行下面这一行的函数传递到函数里,再重新赋值给index。
func就是index函数,print(func)返回得是index内存地址。
1.不修改被装饰函数的源代码(开放封闭原则)
2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式
装饰器=高阶函数+函数嵌套+闭包
高阶函数定义:
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.函数的返回值是一个函数名
作用:不修改函数的调用方式
不足:不能添加新功能
def father(name): print(‘from father %s‘ %name) def son(): print(‘from son‘) def grandson(): print(‘from grandson‘) grandson() son() father(‘林海峰‘)
‘‘‘ 闭包:在一个作用域里放入定义变量,相当于打了一个包 ‘‘‘ def father(name): def son(): # name=‘alex‘ print(‘我爸爸是 [%s]‘ %name) def grandson(): # name=‘wupeiqi‘ print(‘我爷爷是 [%s]‘ %name) grandson() son() father(‘林海峰‘)
装饰器举例
标签:display 分享 运行时间 作用域 作用 返回 style lex logs
原文地址:http://www.cnblogs.com/bingabcd/p/6688374.html