gpt4 book ai didi

python - 如何为 functool partial() 指定 arg 位置

转载 作者:行者123 更新时间:2023-12-03 21:59:33 25 4
gpt4 key购买 nike

根据手册,functools partial() '用于部分函数应用程序,它“卡住”函数参数和/或关键字的某些部分,从而产生一个具有简化签名的新对象。'

指定一个人希望评估的参数的位置的最佳方法是什么?

编辑

请注意,根据注释,要部分评估的函数可能包含命名和未命名的参数(这些函数应该是完全任意的,并且可能是预先存在的)

结束编辑

例如,考虑:

def f(x,y,z):
return x + 2*y + 3*z

然后,使用
from functools import partial

两个都
partial(f,4)(5,6)


partial(f,4,5)(6)

给 32。

但是,如果要评估怎么办,请说第三个参数 z或第一个和第三个参数 x , 和 z ?

有没有方便的方法将位置信息传递给 partial ,使用 decoratordict谁的键是所需的 arg 位置,各自的值是 arg 值?例如通过 xz像这样定位:
partial_dict(f,{0:4,2:6})(5)

最佳答案

不,partial并非旨在卡住非连续位置的位置参数。

要实现您的问题中概述的所需行为,您必须像这样提出自己的包装函数:

def partial_positionals(func, positionals, **keywords):
def wrapper(*args, **kwargs):
arg = iter(args)
return func(*(positionals[i] if i in positionals else next(arg)
for i in range(len(args) + len(positionals))), **{**keywords, **kwargs})
return wrapper

以便:
def f(x, y, z):
return x + 2 * y + 3 * z

print(partial_positionals(f, {0: 4, 2: 6})(5))

输出:
32

关于python - 如何为 functool partial() 指定 arg 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60496556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com