python wraps.谁能给个例子
from functools import wraps
def a():
a='aa'
def b():
b="bbb"
c=wraps(a)(b)
print c#what happen?
“wraps”是什么意思,举个例子最好。
2 个回答
0
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if session.get("user_id") is None:
return redirect("/login")
return f(*args, **kwargs)
return decorated_function
@app.route("/")
@login_required
def index():
return "TODO"
在这里,我们可以看到函数 login_required
变成了一个新的装饰器。这个装饰器的作用是在路由 /
中,要求每个人都必须先登录才能进入。
7
引用自 文档:
functools.wraps(wrapped[, assigned][, updated])
这是一个方便的函数,用来在定义一个包装函数时,作为装饰器调用 partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)
。举个例子:
>>> from functools import wraps
>>> def my_decorator(f):
... @wraps(f)
... def wrapper(*args, **kwds):
... print 'Calling decorated function'
... return f(*args, **kwds)
... return wrapper
...
>>> @my_decorator
... def example():
... """Docstring"""
... print 'Called example function'
...
>>> example()
Calling decorated function
Called example function
>>> example.__name__
'example'
>>> example.__doc__
'Docstring'
如果不使用这个装饰器工厂,示例函数的名字就会变成 'wrapper',而原始的 example() 函数的文档字符串也会丢失。