Python functools.wrap是否具有未修饰的引用?

Python functools.wrap是否具有未修饰的引用?,python,Python,我想知道wrapps是否有对函数f的未修饰引用?当我尝试dir(f) 修改版 #!/usr/bin/python from functools import wraps def logged(func): @wraps(func) def with_logging(*args, **kwargs): print func.__name__ + " was called" return func(*args, **kwargs) retu

我想知道
wrapps
是否有对函数f的未修饰引用?当我尝试
dir(f)


修改版

#!/usr/bin/python

from functools import wraps
def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print func.__name__ + " was called"
        return func(*args, **kwargs)
    return with_logging

@logged
def f(x):
   """does some math"""
   return x + x * x

没有属性?我只是在遵循我以前对decorator所做的操作…

那里有一个对原始
f
的引用,但是它很混乱

#!/usr/bin/python

from functools import wraps
def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print func.__name__ + " was called"
        return func(*args, **kwargs)
    with_logging.undecorated = func
    return with_logging

@logged
def f(x):
   """does some math"""
   return x + x * x

f.undecorated

现在您有了
f
original\u f
,两者都可用。

您可以通过调用以下命令来访问原始函数:

f.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


其中f是您正在装饰的函数

谢谢。我也考虑过函数闭包,但我没把它做好。。。谢谢你的替代解决方案。为什么我的修改版本不能工作?上面说,
f.undecorated
没有这个属性。为什么?你更新的代码在2.7上对我有效:
f.undecorated
具有原始功能。在
wrapped
\uuuuuuuuuuu
上进行标准化会很好,比如说。@nedbatcheld Hmmm。在2.6.5上,它对我不起作用。我会测试更多,谢谢。@ecatmur你什么意思?谢谢
>>> f
<function f at 0x023F6DF0>
>>> f.func_closure[0].cell_contents
<function f at 0x023F6E30>
def f(x):
   """does some math"""
   return x + x * x
original_f = f
f = logged(f)