分类: Python/Ruby
2018-12-16 20:13:24
高阶函数(Higher-order function)
函数即变量
1 把一个函数名当做实参传给另一个函数
2 返回值中包含函数名
import time
def test1():
time.sleep(3) #睡眠3秒
print('this is test1')
def test2(func): #func = test1
print('this is test2')
start_time = time.time() #开始的时间戳
func() #func() = test1()
end_time = time.time() #结束的时间戳
print('this func is running %s' % (end_time-start_time))
return func #返回的其实是test1的内存地址
res = test2(test1)
print(res)
嵌套函数
函数内部再定义函数
def test1():
def test2():
print('this is test2')
test2()
test1()
闭包函数
在一个函数内部定义了一个函数,这个内部函数引用了外部函数的参数和局部变量,并且外部函数的返回值是内部函数的引用(相关参数和变量都保存在返回的函数中)。这个函数就是闭包函数
def deco(func):
def wrapper():
print('添加新功能')
func()
return wrapper
装饰器
实际上就是一个函数
在不改变内部代码和调用方式的基础上增加新的功能
装饰器(无参主函数)
def deco(func): #func=main
def wrapper(): #wrapper()=main()
print('添加新功能')
func() #func()=main()
return wrapper #返回wrapper的内存地址
@deco #语法糖
@deco #main=deco(main) #main=wrapper
def main():
print('this is main!')
main() #main()=wrapper()
本例中有两个@deco
意味着调用了两次deco(func)函数
每一次调用都会返回一个新的函数
执行顺序由下往上
@deco 相当于 b = deco(a)
返回函数是:
def wrapper():
print('添加新功能')
wrapper()
@deco 相当于 a = deco(main)
返回函数是:
def wrapper():
print('添加新功能')
main()
main() 相当于 b()
装饰器(有参主函数)
def deco(func):
def wrapper(*args,**kwargs):
print('I am from China!')
func(*args,**kwargs)
return wrapper
@deco
def main(name):
print('My name is %s' % (name))
if __name__ == '__main__':
main('tom')