python wraps.谁能给个例子

2 投票
2 回答
2066 浏览
提问于 2025-04-15 18:14
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() 函数的文档字符串也会丢失。

撰写回答