zoukankan      html  css  js  c++  java
  • 笔记||Python3进阶之装饰器

    # 装饰器
    # 特征: 是用一个@开头的字符串
    # 装饰器通常用来装饰函数、或者类的方法
    # 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
    # 一般来说装饰器本身也是一个函数
    #
    # def test(name):
    #           def test_in():
    #                  print(name)
    #           return test_in
    #
    # func = test('peiyanan')
    # func()

    '''
    逻辑思想:①首先把peiyanan实参传递给test函数
                  ②在执行test函数时,又返回到test_in函数
                  ③执行test_in函数并打印输出
    '''

    # =================================================================================
    # 不带参数的装饰器(装饰器、被装饰函数都不带参数)
    # import time
    # def showTime(func):
    #              def wrapper():
    #                      start = time.time()
    #                      func()
    #                      end = time.time()
    #                      print('spend is {}'.format(end-start))
    #
    #              return wrapper
    #
    #
    #
    # @showTime       # foo = showTime(foo)
    # def foo():
    #         print('foo..')
    #         time.sleep(3)
    #
    #
    # foo()

    '''
    逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
                  ②在执行showTime函数的同时,会先打印出foo函数中的
                  ③然后又将返回给wrapper函数
                  ④最后逕wrapper函数并打印输出
    '''

    # ==================================================================================
    # 带参数的被装饰的函数
    import time
    def showTime(func):
          def wrapper(x, y):
                start = time.time()
                func(x, y)
                end = time.time()
                print('spend is {}'.format(end-start))

          return wrapper


    @showTime       # foo = showTime(foo)
    def foo(x, y):
            print(x+y)
            time.sleep(3)


    foo(4, 5)

    '''
    逻辑思想:①foo函数调用,执行foo函数体并打印输出
                  ②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
                  ③执行showTime函数体,遇到return,又返回给了wrapper函数体
                  ④执行wrapper函数体时,一次执行并最后输出
    '''

    # 使用装饰器的缺点
    # 不要在装饰器之外添加逻辑功能
    # 不能装饰@staticmethod或者@classmethod已经装饰过的方法
    # 装饰器会对原函数的原信息进行更改
    # 装饰器
    # 特征: 是用一个@开头的字符串
    # 装饰器通常用来装饰函数、或者类的方法
    # 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
    # 一般来说装饰器本身也是一个函数
    #
    # def test(name):
    #        def test_in():
    #             print(name)
    #        return test_in
    #
    # func = test('peiyanan')
    # func()

    '''
    逻辑思想:①首先把peiyanan实参传递给test函数
                  ②在执行test函数时,又返回到test_in函数
                  ③执行test_in函数并打印输出
    '''

    # =================================================================================
    # 不带参数的装饰器(装饰器、被装饰函数都不带参数)
    # import time
    # def showTime(func):
    #          def wrapper():
    #                 start = time.time()
    #                 func()
    #                 end = time.time()
    #                 print('spend is {}'.format(end-start))
    #
    #          return wrapper
    #
    #
    #
    # @showTime          # foo = showTime(foo)
    # def foo():
    #        print('foo..')
    #        time.sleep(3)
    #
    #
    # foo()

    '''
    逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
                  ②在执行showTime函数的同时,会先打印出foo函数中的
                  ③然后又将返回给wrapper函数
                  ④最后逕wrapper函数并打印输出
    '''

    # ==================================================================================
    # 带参数的被装饰的函数
    import time
    def showTime(func):
               def wrapper(x, y):
                      start = time.time()
                      func(x, y)
                      end = time.time()
                      print('spend is {}'.format(end-start))

               return wrapper


    @showTime        # foo = showTime(foo)
    def foo(x, y):
             print(x+y)
             time.sleep(3)


    foo(4, 5)

    '''
    逻辑思想:①foo函数调用,执行foo函数体并打印输出
                  ②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
                  ③执行showTime函数体,遇到return,又返回给了wrapper函数体
                  ④执行wrapper函数体时,一次执行并最后输出
    '''

    # 使用装饰器的缺点
    # 不要在装饰器之外添加逻辑功能
    # 不能装饰@staticmethod或者@classmethod已经装饰过的方法
    # 装饰器会对原函数的原信息进行更改

  • 相关阅读:
    postgres导入和导出
    postgres日常操作
    NumPy Ndarray 对象
    NumPy 简介及安装
    Python两个内置函数locals 和globals
    python之multiprocessing多进程
    postgres外部表
    css中文本超出部分省略号代替
    js中的作用域链
    css中clip:rect矩形剪裁功能
  • 原文地址:https://www.cnblogs.com/peipei-Study/p/12095381.html
Copyright © 2011-2022 走看看