【问题标题】:python decorator not returning function valuepython装饰器不返回函数值
【发布时间】:2020-12-04 00:40:44
【问题描述】:

我从装饰器开始,所以我尝试了一个基本示例,一个调试装饰器,它打印函数名称、输入参数和输出值。下面是我的调试装饰器。

def debug(func):
    @functools.wraps(func)
    def wrapper_debug(*args, **kwargs):
        args_repr = [repr(a) for a in args]                     
        kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]  
        signature = ", ".join(args_repr + kwargs_repr)           
        print(f"Calling {func.__name__}({signature})")
        value = func(*args, **kwargs)
        print(f"{func.__name__!r} returned {value!r}")           
        return value
    return wrapper_debug

获取每个数字的阶乘以及我想要的所有这些阶乘的最终总和。无法得到阶乘的总和。即调试装饰器没有返回原始函数值。

from decorator import debug
import math

math.factorial = debug(math.factorial)

def approximate_e(terms=18):
    return sum(1 / math.factorial(n) for n in range(terms))

approximate_e(5)

这是我运行代码时得到的输出

Calling factorial(0)
'factorial' returned 1
Calling factorial(1)
'factorial' returned 1
Calling factorial(2)
'factorial' returned 2
Calling factorial(3)
'factorial' returned 6
Calling factorial(4)
'factorial' returned 24

预期输出:

Calling factorial(0)
'factorial' returned 1
Calling factorial(1)
'factorial' returned 1
Calling factorial(2)
'factorial' returned 2
Calling factorial(3)
'factorial' returned 6
Calling factorial(4)
'factorial' returned 24
2.708333333333333

【问题讨论】:

    标签: python python-3.x python-decorators


    【解决方案1】:

    确实返回值,但在调用后你不打印它...

    这样做:

    print(approximate_e(5))
    

    【讨论】:

    • 这应该是一个评论,然后投票关闭作为一个错字。
    猜你喜欢
    • 2014-06-27
    • 2020-04-28
    • 2021-01-17
    • 2015-11-21
    • 2019-10-05
    • 2020-06-22
    • 2020-02-10
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多