python被装饰的函数怎么获取其装饰器的变量或返回值?

发布于 2022-09-11 15:33:35 字数 342 浏览 18 评论 0

from functools import wraps

def test(func):
    @wraps(func)
    def inner_func():
        inner_obj = 'inner_obj'
        print(inner_obj)
        return func()
    return inner_func


@test
def test_func():
    return False

a = test_func()
print(a)

我想在test_func中获取装饰器的inner_obj变量,能实现吗??请问

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

疑心病 2022-09-18 15:33:35

作为参数传进去吧。


from functools import wraps

def decorator(func):
    @wraps(func)
    def inner_func():
        inner_obj = 'inner_obj'
        print("in inner_func: {}".format(inner_obj))  
        return func(inner_obj)
    return inner_func
    
@decorator
def func_with_param(*args): 
    print("in func_with_parm: {}".format(args[0]))
    
func_with_param()  # 调用

# in inner_func: inner_obj
# in func_with_parm: inner_obj
缪败 2022-09-18 15:33:35

当然可以了。

你可以给 test_func 加一个参数嘛。在 inner_func 中调用 test_func 的时候把参数传过去

from functools import wraps

def test(func):
    @wraps(func)
    def inner_func():
        inner_obj = 'inner_obj'
        print(inner_obj)
        return func(inner_obj)  #
    return inner_func


@test
def test_func(obj):
    print(obj)      #
    return False

a = test_func()
print(a)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文