Py修行路 python基础 (十)装饰器
2017-04-10 20:02
323 查看
装饰器
一、定义
装饰器:顾名思义,就是对某个东西起到装饰修饰的功能。
python中的装饰器,其本质上就是一个python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能。通俗理解就是 函数 闭包 的实用。
二、语法及注意事项
1、书写规范 @ *** ***指装饰器的函数名
2、装饰器作为一个函数,他会把其下一行的主函数名作为变量,传递到自己的函数去调用。再重新赋值主函数。
3、装饰器必须放到被装饰的函数上边,并且独占一行;多个装饰器下 ,按照先下后上执行。
三、为什么要用装饰器?
开放封闭原则
源代码上线之后,主函数的定义和调用方式尽量避免更改。装饰器本身在源代码中就是可调用的对象。
四、装饰器使用举例
原函数如下:
import time def index(): time.sleep(3) print("welcome to oldboy") index()
执行结果:
welcome to oldboy
在原函数不被更改的情况下,增加新的功能:计算主函数执行的时间!
1、最原始的无参装饰器(无位置参数)。
import time def timer(func): def wrapper(): start_time=time.time() func() stop_time = time.time() print("running time:%s"%(stop_time-start_time)) return wrapper @timer def index(): time.sleep(3) print("welcome to oldboy") index()
#多个装饰器调用! #1、加上了统计函数的执行时间 #2、加上了认证功能,为避免重复登录认证,执行功能完成之后再判断登录状态。已登录则跳过,第一次登录会有登录信息的认证。 import time current_login={'name':None,'login':False} def timmer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) #my_max(1,2) stop_time=time.time() print('run time is %s' %(stop_time-start_time)) return res return wrapper def auth2(auth_type='file'): def auth(func): # print(auth_type) def wrapper(*args,**kwargs): if current_login['name'] and current_login['login']: res=func(*args,**kwargs) return res if auth_type == 'file': name=input('username: ') password=input('password: ') if name == 'zhejiangF4' and password == 'sb945': print('auth successfull') res=func(*args,**kwargs) current_login['name']=name current_login['login']=True return res else: print('auth error') elif auth_type == 'sql': print('还他妈不会玩') return wrapper return auth @timmer @auth2(auth_type='file') #@auth #index=auth(index) def index(): print('welcome to inex page') @auth2() def home(): print('welcome to home page') #调用阶段 index() home()View Code 执行结果如下:
username: zhejiangF4 password: sb945 auth successfull welcome to inex page run time is 10.760615348815918 welcome to home page
相关文章推荐
- Python基础(装饰器)
- python学习系列之python装饰器基础(5)---多装饰器的使用
- Py修行路 python基础 (十二) 协程函数应用 列表生成式 生成器表达式
- Py修行路 python基础 (二十二)异常处理
- Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块
- Python基础17--装饰器
- python基础——装饰器
- Py修行路 python基础 (十一)迭代器 与 生成器
- Python基础-装饰器
- Python 基础 —— 装饰器(2)
- Python——装饰器基础
- Py修行路 python基础(一)初识
- Python基础语法(3)——文件流、异常处理、面向对象编程以及装饰器
- Python基础-装饰器
- Py修行路 python基础(六)前期基础整理
- python学习系列之python装饰器基础(3)---装饰器实现用户登录验证
- python基础——装饰器
- Py修行路 python基础 (四)运算 copy
- Py修行路 python基础 (十七)property 静态方法 类方法
- 【脚本语言系列】关于Python基础知识装饰器,你需要知道的事