装饰器demo
def wrapper(func):
print('装饰器工作了')
def inner(*args,**kwargs):
return func(*args,**kwargs)
return inner @wrapper
def index():
print('index') @wrapper
def order():
print('order') print(index.__name__)
print(order.__name__) # 结果
装饰器工作了
装饰器工作了
inner
inner
functools.wraps
import functools def wrapper(func):
print('装饰器工作了')
@functools.wraps(func) # 能够保留被装饰函数的元信息
def inner(*args,**kwargs):
return func(*args,**kwargs)
return inner @wrapper
def index():
print('index') @wrapper
def order():
print('order') print(index.__name__)
print(order.__name__) # 结果
装饰器工作了
装饰器工作了
index
order
functools.partial
偏函数:对函数进行封装,执行的时候自动传参数。
from functools import partial def func(a,b,c):
return a+b+c f1 = partial(func,1)
v = f1(2,3)
print(v) # 6
偏函数应用
from functools import partial class RequestContext():
def __init__(self):
self.request = '__request__'
self.session = '__session__' obj = RequestContext() def get_data(name):
if hasattr(obj,name):
return getattr(obj,name)
else:
return None request_proxy = partial(get_data,'request')
session_proxy = partial(get_data,'session')
request = request_proxy()
session = session_proxy() print(request)
print(session)