zoukankan      html  css  js  c++  java
  • Python编程系列---Python中装饰器的几种形式及万能装饰器

    根据函数是否传参  是否有返回值 ,可以分析出装饰器的四种形式:

    形式一:无参无返回值

     1 def outer(func):
     2     def wrapper():
     3         print("装饰器功能1")
     4         ret = func()
     5         print("装饰器功能2")
      return ret
    6 return wrapper 7 8 # 定义一个无参无返回值的函数 9 @outer 10 def main_func(): 11 print("hello") 12 13 main_func() # 开始执行 14 15 16 结果如下: 17 装饰器功能1 18 hello 19 装饰器功能2 20 21 进程已结束,退出代码 0

    总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,也可以在其之后

    形式二:无参有返回值

     1 def outer(func):
     2     def wrapper():
     3         print("装饰器功能1")
     4         ret =func()
     5         print("装饰器功能2")
     6         return ret
     7     return wrapper
     8 
     9 # 定义一个无参有返回值的函数
    10 @outer
    11 def main_func():
    12     return "hello"
    13 
    14 
    15 print(main_func()
    16 
    17 
    18 结果如下:
    19 装饰器功能1
    20 装饰器功能2
    21 hello
    22 
    23 进程已结束,退出代码 0

    总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,但不能在原功能函数之后

    形式三:有参无返回值

     1 def outer(func):
     2     def wrapper(str1):
     3         print("装饰器功能1")
     4         ret =func(str1)
     5         print("装饰器功能2")
     6         return ret
     7     return wrapper
     8 
     9 # 定义一个有参无返回值的函数
    10 @outer
    11 def main_func(str1):
    12     print("hello "+str1)
    13 
    14 
    15 main_func("Python")
    16 
    17 
    18 结果如下:
    19 装饰器功能1
    20 hello Python
    21 装饰器功能2
    22 
    23 进程已结束,退出代码 0

    总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,也可以在其之后

    形式四:有参有返回值

     1 def outer(func):
     2     def wrapper(str1):
     3         print("装饰器功能1")
     4         ret =func(str1)
     5         print("装饰器功能2")
     6         return ret
     7     return wrapper
     8 
     9 # 定义一个有参有返回值的函数
    10 @outer
    11 def main_func(str1):
    12     return "hello "+str1
    13 
    14 
    15 print(main_func("Python"))
    16 
    17 
    18 结果如下:
    19 装饰器功能1
    20 装饰器功能2
    21 hello Python
    22 
    23 进程已结束,退出代码 0

    总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,但不能在原功能函数之后

     

    现在用万能装饰器来实现以上四种形式的装饰器:

     1 def set_func(func):
     2     def wrapper(*args,**kwargs):
     3         print("装饰器功能1")
     4         return func(*args,**kwargs)
     5     return wrapper
     6 
     7 @set_func
     8 def show1():
     9     print("----show1----")
    10 
    11 @set_func
    12 def show2(string,n,l):
    13     return 'Hello' + string + str(n) + ':'.join(l)
    14 
    15 show1()
    16 print(show2(' world ', 2, ['one', 'two', 'three']))
    17 
    18 
    19 结果如下:
    20 装饰器功能1
    21 ----show1---
    22 装饰器功能1
    23 Hello world 2one:two:three
    24 
    25 进程已结束,退出代码 0

    如果你和我有共同爱好,我们可以加个好友一起交流!

     

  • 相关阅读:
    第三届蓝桥杯C++B组国(决)赛真题
    第二届蓝桥杯C++B组国(决)赛真题
    第二届蓝桥杯C++B组国(决)赛真题
    第二届蓝桥杯C++B组国(决)赛真题
    第二届蓝桥杯C++B组国(决)赛真题
    第二届蓝桥杯C++B组国(决)赛真题
    Java实现矩阵相乘问题
    Java实现矩阵相乘问题
    Java实现矩阵相乘问题
    Java实现矩阵相乘问题
  • 原文地址:https://www.cnblogs.com/ywk-1994/p/9502510.html
Copyright © 2011-2022 走看看