码迷,mamicode.com
首页 > 编程语言 > 详细

Python编程系列---Python中装饰器的几种形式及万能装饰器

时间:2018-08-19 20:56:03      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:返回值   nbsp   join   color   功能   app   fun   world   结果   

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

形式一:无参无返回值

 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

 

Python编程系列---Python中装饰器的几种形式及万能装饰器

标签:返回值   nbsp   join   color   功能   app   fun   world   结果   

原文地址:https://www.cnblogs.com/ywk-1994/p/9502510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!