12. Python开发--装饰器
2017-05-22 23:45
127 查看
#!/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')
# -*- 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')
相关文章推荐
- Python全栈开发之8、装饰器详解
- Day04 - Python 迭代器、装饰器、软件开发规范
- 插件和过滤器装饰器开发中的感悟-python-django
- 15. Python开发--协程函数(yield表达式形式,装饰器)
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域(装饰器基础)
- Python自动化开发学习4-装饰器
- Python-开发之路-装饰器&多层装饰器简介
- Python 04--迭代器、装饰器、软件开发规范
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
- python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
- Python开发基础-Day7-闭包函数和装饰器基础
- Python开发基础-Day8-装饰器扩展和迭代器
- python3 开发面试题(装饰器必须考)6.4
- pydev-一个Eclipse的python开发插件
- 搭建Python的集成开发环境WingIDE
- Python+wxWidgets快速开发桌面小程序
- Python开发编码规范
- Python开发编码规范
- 构建Python的桌面开发环境 于2005年07月26日
- Python开发编码规范