'可以在部分中更改参数值吗?'

2024-10-03 17:15:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到一种清晰有效的方法来更改functools.partial的参数值集

让我们看一个简单的例子:

from functools import partial

def fn(a,b,c,d,e):
   print(a,b,c,d,e)

fn12 = partial(fn, 1,2)

稍后,我想要一些类似于:

fn12 [0] = 7 

替换特定位置上的值而不创建新的分部,因为那里的代码非常繁重

另外:我问一下改变部分值的一般可能性

简单的例子是:

def printme( a,b,c,d,e):
    print(a,b,c,d,e)

class my_partial:

    def __init__(self, fn, *args):

        self.__func__ = fn

        self. args = list(args) 

    def __call__(self, *next_args):

        call = self. args + list(next_args)       

        return self. __func__(* (call) )


fn12 = my_partial(printme,1,2)

fn12(3,4,5) 

fn12.args[1] = 7

fn12(3,4,5) 

例如,对于小部件,我需要它,其中动作函数的定义如下:

  rb.config(command = partial(...)) 

但是我想修改部分给出的一些参数。我可以再做一个新的部分,但看起来有点混乱


Tags: selfmydefargscallpartiallist例子
1条回答
网友
1楼 · 发布于 2024-10-03 17:15:11

如果允许研究partial的实现,那么可以使用__reduce____setstate__替换args

from functools import partial

def fn(a,b,c,d,e):
   print(a,b,c,d,e)

fn12 = partial(fn, 1,2)

def replace_args(part, new_args):
    _,_, f = part.__reduce__()
    f, _, k, n = f
    part.__setstate__( (f, new_args, k, n) )

fn12('c','d','e')
replace_args(fn12, (7,2))
fn12('c','d','e')

输出:

1 2 c d e
7 2 c d e

相关问题 更多 >