Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332053
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 748
  • 用 户 组: 普通用户
  • 注册时间: 2018-09-21 18:49
文章分类

全部博文(72)

我的朋友

分类: 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')


阅读(2550) | 评论(0) | 转发(0) |
0

上一篇:python3 迭代器

下一篇:kvm 虚拟机热迁移

给主人留下些什么吧!~~