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

python基础----装饰器

时间:2017-04-11 16:37:30      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:基础   wrap   username   opened   sed   本地   aac   方式   时间模块   

一、装饰器定义

器即函数

装饰即修饰,意指为其他函数添加新功能

装饰器定义:本质就是函数,功能是为其他函数添加新功能

 

二、装饰器需遵循的原则

1.不修改被装饰函数的源代码(开放封闭原则)

2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

 

三、实现装饰器知识储备

装饰器=高阶函数+函数嵌套+闭包

 

四、无参装饰器

技术分享
 1 #装饰器
 2 
 3 import time  #调用时间模块(系统自带的time模块)
 4 def timmer(func):
 5     def wrapper():
 6         #print(func)
 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 @timmer    #index=timmer(index)
14 def index():
15     time.sleep(1)
16     print(welcome to oldboy)
17 index()    #   --------->wrapper()
无参装饰器
技术分享
 1 import time  #调用时间模块(系统自带的time模块)
 2 def timmer(func):
 3     def wrapper(*args,**kwargs):
 4         start_time=time.time()
 5         func(*args,**kwargs)
 6         stop_time=time.time()
 7         print(run time is %s %(stop_time - start_time))
 8     return wrapper
 9 
10 @timmer
11 def home(name):
12     time.sleep(2)
13     print(welcome to %s home page%name)
14 
15 @timmer
16 def auth(name,password):
17     print(name,password)
18 
19 @timmer
20 def tell():
21     print(------------------)
22 
23 home(dragon)
24 auth(egon,123)
25 tell()
无参装饰器1
技术分享
 1 import time  #调用时间模块(系统自带的time模块)
 2 def timmer(func):
 3     def wrapper(*args,**kwargs):
 4         start_time=time.time()
 5         res=func(*args,**kwargs)
 6         stop_time=time.time()
 7         print(run time is %s %(stop_time - start_time))
 8         return res
 9     return wrapper
10 
11 @timmer
12 def my_max(x,y):
13     print(my_max function)
14     res=x if x > y else y
15     return res
16 
17 res=my_max(1,2)
18 print(=====>,res)
无参装饰器2

 

五、有参装饰器

技术分享
 1 def auth2(auth_type):
 2     def auth(func):
 3         #print(auth_type)
 4         def wrapper(*args,**kwargs):
 5             if auth_type == file:
 6                 name = input (username: )
 7                 password = input(password: )
 8                 if name == egon and password == 123:
 9                     print(auth successfull)
10                     res=func(*args,**kwargs)
11                     return res
12                 else:
13                     print(auth error)
14             elif auth_type == sql:
15                 print(还他妈不会玩)
16         return wrapper
17     return auth
18 
19 @auth2(auth_type=file)      #index=auth(index)             #这是通过本地文件方式读取
20 def index():
21     print(welcome to index page)
22 index()
23 
24 
25 @auth2(auth_type=sql)      #index=auth(index)                 #这是通过数据库方式读取
26 def index():
27     print(welcome to index page)
28 index()
有参装饰器

 

python基础----装饰器

标签:基础   wrap   username   opened   sed   本地   aac   方式   时间模块   

原文地址:http://www.cnblogs.com/wangyongsong/p/6689678.html

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