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

闭包函数 装饰器 有参装饰器

时间:2017-07-30 23:38:45      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:com   源代码   闭包函数   soft   时间   style   目标   功能   time   

闭包函数

1 内部函数

2 包含对外部作用域而非全局作用域的引用
闭包函数的特点:
      自带作用域
       延迟计算

 

 #闭包函数定义
1
def timmer(func): 2 def inner(*args,**kwargs): 3 re = func(*args,**kwargs) 4 return re 5 return inner 6 7 index(): 8 print("hello") 9 10 index = timmer(index) #index == inner 11 index() #index()==inner()

 

 

装饰器

 

一:开放封闭原则,对扩展是开放的,对修改是封闭的

 

二:装饰器,装饰器本质可以任意可调用对象,被装饰的对象也可以是任意
可调用对象,
装饰器的功能是:
在不修改被装饰对象源代码以及调用方式的前提下为期添加新功能

 

原则:
    1.不修改源代码
    2.不修改调用方法
    目标:添加新功能

 

 1 #装饰器的语法:在被装饰对象的正上方的单独一行,@装饰器名字
 2 import time
 3 import random
 4 #装饰器
 5 def timmer(func):
 6      def wrapper():
 7          start_time = time.time()  #添加的计算时间功能
 8          func()
 9          stop_time=time.time()
10          print(run time is %s %(stop_time-start_time))
11      return wrapper
12 
13 #被装饰函数
14 @timmer      #index=timmer(index)  #index == wrapper
15 def index():  #index()== wrapper()
16      time.sleep(random.randrange(1,5))
17      print(welecome to index page)
18 
19 @timmer      #home=timmer(home)  #home==wrapper
20 def home():  
21      time.sleep(random.randrange(1,3))
22      print(welecome to HOME page)
23 
24 index() #wrapper()
25 home() #wrapper()

 

 

有参装饰器

 

 1 def deco(auth_type=file):
 2     def auth(func):
 3         def wrapper(*args,**kwargs):
 4             if auth_type == file:
 5                 print(文件的认证方式)
 6             elif auth_type == ldap:
 7                 print(ldap认证方式)
 8             elif auth_type == mysql:
 9                 print(mysql认证方式)
10             else:
11                 print(不知到的认证方式)
12         return wrapper
13     return auth
14 
15 @deco(auth_type=abc) #@auth #index=auth(index)
16 def index():
17     print(welecome to index)
18 
19 @deco(auth_type=ldap)
20 def home(name):
21     print(welecome %s to home page %name)
22 
23 index()
24 
25 home(egon)

 

闭包函数 装饰器 有参装饰器

标签:com   源代码   闭包函数   soft   时间   style   目标   功能   time   

原文地址:http://www.cnblogs.com/luominwen/p/7260740.html

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