为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2022-11-18 14:09:44
假设我有这个功能def add(a,b,c): return a+b+c我想要一个固定 b 值的装饰器,比如 5,并返回一个只有两个参数 a 和 c 的函数。def add5(a,c): return a+c+5函数 add5 不应有任何其他参数。我不想用 b 的默认参数来解决这个问题。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以使用functools.partial:


functools.partial(func, /, *args, **关键字)


返回一个新的部分对象,当调用该对象时,其行为类似于使用位置参数 args 和关键字参数 keywords 调用的 func。


from functools import partial


def 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


查看完整回答
反对 回复 2022-11-18
?
森林海

TA贡献2011条经验 获得超2个赞

在 Python 中,函数是第一类对象,这意味着 –


函数是对象;它们可以被引用,传递给变量,也可以从其他函数返回。


函数可以在另一个函数中定义,也可以作为参数传递给另一个函数。


装饰器是 Python 中非常强大和有用的工具,因为它允许程序员修改函数或类的行为。装饰器允许我们包装另一个函数以扩展包装函数的行为,而无需永久修改它。


在装饰器中,函数被作为另一个函数的参数,然后在包装函数内部被调用。


在你的情况下:


def my_custom_decorator(f):

    def outer_function(*args):

        res = f(*args)

        return res + 5

    return outer_function



@my_custom_decorator

def A_and_C(a, c):

    return a+c



print(A_and_C(2,3))


查看完整回答
反对 回复 2022-11-18
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

你可以这样做


def add5(*arg):

    return sum(args)+5


print(add5(1,2))

这将对您传递给函数的所有参数求和,并将 5 添加到参数的总和中。输出


8


查看完整回答
反对 回复 2022-11-18
  • 3 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信