zoukankan      html  css  js  c++  java
  • python 通用装饰器,带有参数的装饰器,

    # 使用装饰器对有返回值的函数进行装饰
    # def func(functionName):
      # print('---func-1----')
      # def func_in():
        # print("----func_in---1-")
        # x = functionName() #保存返回来的hahah
        # print("----func_in---2-")
        # return x
      # print('---func-2----')
      # return func_in

    # @func
    # def test():
      # print("-----test-----")
    # return "haha"

    # ret = test()
    # print("test return value is %s"%ret)

    # ---func-1----
    # ---func-2----
    # ----func_in---1-
    # -----test-----
    # ----func_in---2-
    # test return value is haha


    # 使用通用装饰器对函数进行装饰
    # def func(functionName):
      # def func_in(*args,**kwatgs):
        # print("记录日志")
        # x = functionName(*args,**kwatgs)
        # return x
      # return func_in

    # @func
    # def test():
      # print("-----test-----")
    # return "haha"

    # ret = test()
      # print("test return value is %s"%ret)
    # # -----test-----
    # # test return value is haha

    # @func
    # def test2():
      # print("----test2----")

    # a = test2()
      # print(a)
    # # ----test2----
    # # None

    # @func
    # def test3(a):
      # print("-----test3----a=%d"%a)

    # test3(10)
    # -----test3----a=10

    # 记录日志
    # -----test-----
    # test return value is haha

    # 记录日志
    # ----test2----
    # None

    # 记录日志
    # -----test3----a=10

    # 带有参数的装饰器、、
    def func_arg(arg):
      print(arg)
      def func(functionName):
        print('----func----')
        def func_in():
          print("--记录日志---")
          print(arg)
          if arg=='呵呵':
            functionName()
            functionName()
          else:
            functionName()
        return func_in
      return func

    # 1.先执行func_arg('呵呵')函数,这个函数return的结果是func这个函数的引用
    # 2.@func
    # 3.使用@func对test进行装饰

    # 带有参数的装饰器,能够起到在运行时,有不同的功能
    @func_arg('呵呵')
    def test():
      print("-----test-----")

    ret = test()
    # 呵呵
    # ----func----
    # --记录日志---
    # -----test-----

    @func_arg("haha")
      def test2():
    print("--test2--")

    test2()

    # haha
    # ----func----
    # --记录日志---
    # haha
    # --test2--

  • 相关阅读:
    【转】return 使用示例
    java基础_二维数组的行和列
    新版SQL授权用户时报错 near 'IDENTIFIED BY '密码' with grant option' at line 1
    GO kafka sarama 生产者 消费者 简单 实现
    Windows 安装kafka
    windows 连接nsq
    reflect: call of reflect.Value.NumField on ptr Value
    django 数据库 mysql 事务 处理
    python 类的继承
    python 中 insert 返回 None
  • 原文地址:https://www.cnblogs.com/sklhtml/p/9447801.html
Copyright © 2011-2022 走看看