标签:装饰器 全局 run time fun 帮助信息 div play index
一、闭包函数的定义
定义在函数内部的函数,特点是包含对外部作用域而不是全局作用域名字的引用,该函数称之为闭包函数。
参数传递两种方法:
1.传参
2.闭包
二、装饰器
1.为什么要用装饰器:开放封闭原则:对扩展是开放的,对修改是封闭的。
2.什么是装饰器
- 用来装饰他人,装饰器本身可是任意可调用函数,被装饰的对象也可以是任意可调用对象
-遵循的原则:
1.不修改被装饰对象的源代码
2.不修改被装饰对象的调用方式
-目标:在遵循原则1和2的前提下,为被装饰对象添加新功能
装饰器分类:无参装饰器,有参装饰器
另:如果想查看装饰器内置函数的帮助信息需要导入 from functools import wraps,在inner函数正上方@wraps(func)
无参装饰器示例
示例1:
import time from functools import wraps def timmer(func): @wraps(func)#将原始函数的帮助信息传递给inner函数 def inner(*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 inner @timmer def index(): ‘‘‘ index function :return: ‘‘‘ time.sleep(3) print(‘welcome to index page‘) return 123 @timmer def home(name): ‘‘‘ home function :param name: :return: ‘‘‘ time.sleep(2) print(‘welcome to home page %s‘ %name) return 456
示例2:
import time from functools import wraps current_state={‘user‘:None,‘login_status‘:False} def auth(func): @wraps(func) def inner(*args,**kwargs): if current_state[‘user‘] and current_state[‘login_status‘]: res = func(*args, **kwargs) return res username=input(‘请输入用户名:‘).strip() passwd=input(‘请输入密码:‘).strip() if username==‘egon‘ and passwd==‘123‘: current_state[‘user‘]=username current_state[‘login_status‘]=True print(‘login successfull‘) res = func(*args, **kwargs) return res return inner @auth def index(): time.sleep(3) print(‘welcome to index page‘) return 123 @auth def home(name): time.sleep(2) print(‘welcome %s to home page‘ %name) return 456
装饰器最多三层,最外层用来传递参数。
多个装饰器修饰同一个函数,有顺序之分,@装饰器修饰它正下方的函数。
标签:装饰器 全局 run time fun 帮助信息 div play index
原文地址:http://www.cnblogs.com/yangyuelin/p/7705984.html