ITPub博客

首页 > 应用开发 > > python3 装饰器

python3 装饰器

作者:lakefront 时间:2019-09-17 15:13:47 0 删除 编辑

高阶函数(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')

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2491/viewspace-3120182/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-05

  • 博文量
    99
  • 访问量
    625