Python:通过修复其他参数来减少函数中参数数量的装饰器

假设我有这个功能

def add(a,b,c):
return a+b+c

我想要一个固定 b 值的装饰器,比如 5,并返回一个只有两个参数 a 和 c 的函数。

def add5(a,c):
return a+c+5

函数 add5 不应有任何其他参数。我不想用 b 的默认参数来解决这个问题。


一只萌萌小番薯
浏览 104回答 3
3回答

心有法竹

您可以使用functools.partial:functools.partial(func, /, *args, **关键字)返回一个新的部分对象,当调用该对象时,其行为类似于使用位置参数 args 和关键字参数 keywords 调用的 func。from functools import partialdef add(a,b,c):    return a+b+c如果你想给第一个位置参数一个固定的值,你可以这样做add5 = partial(add, 5)print(add5(1, 2))# 8由于第一个位置参数 (a) 将替换为 5,因此您不能:print(add5(a=3, b=4))# TypeError: add() got multiple values for argument 'a'如果要控制修复哪个参数,请使用关键字参数:add5 = partial(add, b=5)print(add5(a=1, c=2))# 8

森林海

在 Python 中,函数是第一类对象,这意味着 –函数是对象;它们可以被引用,传递给变量,也可以从其他函数返回。函数可以在另一个函数中定义,也可以作为参数传递给另一个函数。装饰器是 Python 中非常强大和有用的工具,因为它允许程序员修改函数或类的行为。装饰器允许我们包装另一个函数以扩展包装函数的行为,而无需永久修改它。在装饰器中,函数被作为另一个函数的参数,然后在包装函数内部被调用。在你的情况下:def my_custom_decorator(f):    def outer_function(*args):        res = f(*args)        return res + 5    return outer_function@my_custom_decoratordef A_and_C(a, c):    return a+cprint(A_and_C(2,3))

慕丝7291255

你可以这样做def add5(*arg):    return sum(args)+5print(add5(1,2))这将对您传递给函数的所有参数求和,并将 5 添加到参数的总和中。输出8
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python