gpt4 book ai didi

python - functools.partial 以及它如何组成非关键字参数

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:26 26 4
gpt4 key购买 nike

我发现 functools.partial 有很多很棒的用例。

但是,我发现需要定义我称之为 partial_right 的东西。它就像部分的,但从“右边”绑定(bind)非 kwargs。

我的问题是……我需要 partial_right,还是我遗漏了什么?我可以使用 partial() 或其他一些技术实现我想要的。

functools.partial 的实现类似于:

def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(args + fargs), **newkeywords)
...

我的问题是“(args + fargs)”的顺序。这种排序对于某些目的来说非常有用,但我发现有时候我想要相反的排序:

def partial_right(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
...
return func(*(fargs + args), **newkeywords)
...

一个这样的用例是当代码通过方法上的一些装饰器构建“动态”方法时。 “self”的值此时未知:

 class SomeClass(object):
@decorator(a_value, b_value)
def my_method(self, a, b):
...

在我的用例中,my_method 的所有参数都是已知的,“self”除外。所以 partial_right 用于动态创建等同于:

  def my_method_dynamic(self):
self.my_method(a_value, b_value)

最佳答案

对于您的特定用例,使用 operator.methodcaller 可能更合适:

import operator
my_method_dynamic = operator.methodcaller('my_method', a_value, b_value)
my_method_dynamic(obj) # calls obj.my_method(a_value, b_value)

关于python - functools.partial 以及它如何组成非关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713159/

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