高阶函数(Higher-order function)

函数即变量

1   把一个函数名当做实参传给另一个函数

2   返回值中包含函数名


import time

def test1():

    time.sleep(3)                     #睡眠3秒

    print('this is test1')


deftest2(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')


09-13 02:56