python 装饰器如何添加参数

python decorator how to add parameters

我有一个 python 装饰器,它会舍入函数的 return 2 位小数:

def round_decimal(func):
    def inner(*args, **kwargs):
        return round(func(*args, **kwargs),2)
    return inner

@round_decimal
def func(a,b,c):
    
    return a/b/c

func(1.33333,3.44444,4.555)

输出为:

0.08

我的问题是我怎样才能使圆小数点成为参数:

像这样:

def round_decimal(func,decimal):
    def inner(*args, **kwargs):
        return round(func(*args, **kwargs),decimal)
    return inner

@round_decimal(3)
def func(a,b,c):

    return a/b/c

func(1.33333,3.44444,4.555)

如果四舍五入等于 3,则输出应为:

0.085

你需要一个装饰器工厂,这是一个函数,returns装饰器:

from functools import wraps


def round_decimal(n):
    def decorator(fn):
        @wraps(fn)
        def inner(*args, **kwargs):
            return round(fn(*args, **kwargs), n)

        return inner

    return decorator


@round_decimal(3)
def func(a, b, c):
    return a / b / c


print(func(1.33333, 3.44444, 4.555))

输出:

0.085