12. Python开发--装饰器
来源:互联网 发布:皇后谥号 知乎 编辑:程序博客网 时间:2024/06/01 18:33
#!/usr/bin/python
# -*- coding:utf-8 -*-
'''
装饰器:修饰别人的工具,修饰添加功能,工具指的是函数
装饰器本身可以是任何可调用对象,被装饰的对象也可以是任意可调用对象
为什么要用装饰器:
开放封闭原则:对修改是封闭的,对扩展是开放的
装饰器就是为了在不修改被装饰对象的源代码以及调用方式的前提下,为其添加新功能
'''
### 例1
import time
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return wrapper
@timmer
def index():
time.sleep(3)
print('welcome to index')
index()
### 例2
import time
def timmer(func):
def wrapper():
start_time=time.time()
func() #index()
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return wrapper
@timmer #index=timmer(index)
def index():
time.sleep(3)
print('welcome to index')
# f=timmer(index)
# print(f)
# f() #wrapper()---->index()
# index=timmer(index) #index==wrapper
index() #wrapper()----->
### 例3 流程分析
import time
def timmer(func):
def wrapper():
start_time=time.time()
func()
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return wrapper
@timmer #index=timmer(index)
def index():
time.sleep(3)
print('welcome to index')
index() #wrapper()
###########
import time
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
return wrapper
@timmer #index=timmer(index)
def index():
time.sleep(3)
print('welcome to index')
return 1
@timmer
def foo(name):
time.sleep(1)
print('from foo')
res=index() #wrapper()
print(res)
res1=foo('egon') #res1=wrapper('egon')
print(res1)
#########为函数增加认证功能
def auth(func):
def wrapper(*args,**kwargs):
name=input('>>: ')
password=input('>>: ')
if name == 'egon' and password == '123':
print('\033[45mlogin successful\033[0m')
res=func(*args,**kwargs)
return res
else:
print('\033[45mlogin err\033[0m')
return wrapper
@auth
def index():
print('welcome to index page')
@auth
def home(name):
print('%s welcome to home page' %name)
index()
home('egon')
#########认证功能
login_user={'user':None,'status':False}
def auth(func):
def wrapper(*args,**kwargs):
if login_user['user'] and login_user['status']:
res=func(*args,**kwargs)
return res
else:
name=input('>>: ')
password=input('>>: ')
if name == 'egon' and password == '123':
login_user['user']='egon'
login_user['status']=True
print('\033[45mlogin successful\033[0m')
res=func(*args,**kwargs)
return res
else:
print('\033[45mlogin err\033[0m')
return wrapper
@auth
def index():
print('welcome to index page')
@auth
def home(name):
print('%s welcome to home page' %name)
index()
home('egon')
#========================有参装饰器
import time
def timmer(func):
def wrapper(*args,**kwargs):
print('====>timmer.wrapper')
start_time=time.time()
res=func(*args,**kwargs) #auth_wrapper
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
return wrapper
login_user={'user':None,'status':False}
def auth(driver='file'):
def auth2(func):
def wrapper(*args,**kwargs):
print('=======>auth.wrapper')
time.sleep(5)
if driver == 'file':
if login_user['user'] and login_user['status']:
res=func(*args,**kwargs)
return res
else:
name=input('>>: ')
password=input('>>: ')
if name == 'egon' and password == '123':
login_user['user']='egon'
login_user['status']=True
print('\033[45mlogin successful\033[0m')
res=func(*args,**kwargs)
return res
else:
print('\033[45mlogin err\033[0m')
elif driver == 'ldap':
print('==========ldap的认证')
elif driver == 'mysql':
print('==========mysql的认证')
return func(*args,**kwargs)
else:
print('=========未知的认证来源')
return wrapper
return auth2
@auth('file') #@auth2====>index=auth2(index)===>index=auth_wrapper
@timmer #index=timmer(auth_wrapper) #index=timmer_wrapper
def index():
time.sleep(3)
print('welcome to index page')
@auth(driver='mysql')
def home(name):
print('%s welcome to home page' %name)
index() #timmer_wrapper()
home('egon') #wrapper('egon')
阅读全文
0 0
- 12. Python开发--装饰器
- Python-开发之路-装饰器&多层装饰器简介
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- 10. Python开发--函数名称空间与作用域
- zabbix3.0.4添加对web页面url的状态监控
- 深度学习导论
- 11. Python开发--闭包函数
- Ionic2常用命令 Ionic3命令
- 12. Python开发--装饰器
- 洛谷OJ
- Android开发之FloatingActionButton的使用
- Java中try-catch-finally-return的执行顺序
- HDU1754—I Hate It线段树求最大值,单点更新
- POJ3617Best Cow Line(贪心)
- Android 双击返回键退出程序
- 13. Python开发--迭代器
- Linux centos7.0装搜狗拼音 sougou