标签:ESS oba 模板 one 嵌套 time 新功能 put rom
装饰器是用来给某个功能添加新功能的工具。
装饰器本身可以是任意可调用的对象,被装饰的对象也可以是任意可调用的对象。
想要在不修改功能源代码以及调用方式的前提下为原功能添加新功能。
装饰器是闭包函数的应用
闭包函数=函数对象+函数嵌套定义+作用域
闭包函数指的是定义在函数内部的函数,并且该内部函数包含对外层函数作用域名称的引用。
闭包函数
import time
def index():
print(‘welcome to index page‘)
time.sleep(3)
return ‘something‘
def outter(func):
def wrapper():
start=time.time()
res=func()
end=time.time()
print(‘ process run time is %s‘ %(end-start))
return res
return wrapper
index=outter(index)
res = index()
print(res)
编写一个计算程序运行时间的装饰器
import time
@outter
def index(name):
print(‘from %s‘%name)
time.sleep(2)
def outter(func):
def wrapper(*args,**kwargs):
start=time.time()
func(*args,**kwargs)
end=time.time()
print(‘run time is %s‘%(end-start))
return wrapper
index()
无参数装饰器模板
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
import time
login_userinfo = {‘userinfo‘: None}
def outter(name=‘zz‘):
def auth(func):
def wrapper(*args, **kwargs):
if login_userinfo[‘userinfo‘] is not None:
res = func(*args, **kwargs)
input_user = input(‘username>>>‘)
input_passwd = input(‘password>>>‘)
if input_user == name and input_passwd == ‘abc‘:
print(‘login successful‘)
login_userinfo[‘userinfo‘] = input_user
res = func(*args, **kwargs)
return res
return wrapper
return auth
@outter(name=‘szz‘)
def index(name):
print(‘this is %s‘ % name)
time.sleep(2)
return ‘something‘
print(index(‘index‘))
装饰器的用途就是为了在不改变源代码的基础上添加新的功能,或者需要接收新的变量,要么直接传值给函数,要么运用闭包的原理,内层函数可以对外层函数作用域的引用,把要传的值用函数包起来传下去。
global关键字的用途是把局部变量声明为全局变量,可以在函数内部修改全局变量
nonlocal关键字是把局部变量声明为上一层的作用域
标签:ESS oba 模板 one 嵌套 time 新功能 put rom
原文地址:https://www.cnblogs.com/zuanzuan/p/9713721.html