gpt4 book ai didi

python - functools.wraps 是否有未修饰的引用?

转载 作者:行者123 更新时间:2023-11-28 23:00:54 34 4
gpt4 key购买 nike

#!/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

我想知道 wraps 是否有对函数 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)
with_logging.undecorated = func
return with_logging

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

f.undecorated

没有属性?我只是在遵循我过去使用装饰器所做的事情......

最佳答案

那里有对原始 f 的引用,但很难找到。

>>> f
<function f at 0x023F6DF0>
>>> f.func_closure[0].cell_contents
<function f at 0x023F6E30>

第一个是包装的f,第二个是原始的f,注意十六进制地址是不同的。

如果您需要访问原始的 f,我建议您以不同的方式包装它:

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

现在你有 foriginal_f,它们都可用。

关于python - functools.wraps 是否有未修饰的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658611/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com