码迷,mamicode.com
首页 > 其他好文 > 详细

函数-装饰器

时间:2017-07-28 20:08:06      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:**kwargs   timer   返回值   执行   意思   闭包函数   after   调用   time   

1、装饰器

 装饰器实际上就是一个对函数中的闭包的实际应用,他的本质是一个闭包函数。

 

 

2、装饰器的功能:

  再不修改原函数及其调用方式的情况下对原函数功能进行扩展。

 

 

3、装饰器的固定格式

1  def timer(func):
2      def inner(*args,**kwargs):
3          ‘‘‘执行函数之前要做的‘‘‘
4          re = func(*args,**kwargs)  #*args、**kwargs将动态参数接收到的元祖解压成分散的个体,re接收被装饰函数中的返回值
5          ‘‘‘执行函数之后要做的‘‘‘
6          return re
7      return inner
8    语法糖:@装饰器函数名 == 被装饰函数名=装饰器函数名(被装饰函数名)

 

 

4、开放封闭原则

      开发领域中有一个开放封闭原则即对扩展开放,对修改封闭。

  意思就是一个函数让它扩展新功能,因为之前的开发过程中可能功能需求并没有考虑周全如果不能扩展新功能的话产品就不完善了,但是如果直接修改源代码则会影响这个函数的其他使用者,所以一般情况下不允许修改源代码。

 



5、带参数的装饰器

  

 1 def outer(flag):
 2     def timer(func):
 3         def inner(*args,**kwargs):
 4             if flag:
 5                 print(‘‘‘执行函数之前要做的‘‘‘)
 6             re = func(*args,**kwargs)
 7             if flag:
 8                 print(‘‘‘执行函数之后要做的‘‘‘)
 9             return re
10         return inner
11     return timer
12 
13 @outer(False)
14 def func():
15     print(111)
16 
17 func()

 

6、多个装饰器装饰一个函数

 

 1 def wrapper1(func):
 2     def inner():
 3         print(wrapper1 ,before func)
 4         func()
 5         print(wrapper1 ,after func)
 6     return inner
 7 
 8 def wrapper2(func):
 9     def inner():
10         print(wrapper2 ,before func)
11         func()
12         print(wrapper2 ,after func)
13     return inner
14 
15 @wrapper2
16 @wrapper1
17 def f():
18     print(in f)
19 
20 f()

 

函数-装饰器

标签:**kwargs   timer   返回值   执行   意思   闭包函数   after   调用   time   

原文地址:http://www.cnblogs.com/lianxuebin/p/7252209.html

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