有没有一种方法可以重设python部分参数,而不必重新定义分部函数本身?在
例如,我希望能够重置下面的累加器:
accum = []
def accumulator(list, item):
list.append(item)
a = partial(accumulator, accum)
a(5)
a(7)
accum
它按预期打印[5, 7]
。现在,我想将列表重置为空,但保留a
上定义的行为:
^{pr2}$
我希望[8]
但是这次,我得到了一个空列表。有没有办法保持定义函数和外部范围内变量之间的联系?在
Tags:
partial
绑定对象,而不是变量;a
引用了accum
引用的列表对象,而不是{accum
只会重新绑定accum
引用,而不是{清除列表对象时:
或者在Python 3.3之前:
^{pr2}$这个带有一个与
partial
绑定的可变对象的整个设置似乎是一个奇怪的别名和状态错误的配方。无论你想解决什么潜在的问题,我都会推荐一种不同的方法。在Python正在创建一个闭包,这意味着partial返回一个函数
a
,该函数在内存中保存一个指向列表accum
的指针,比如说0x1。在现在,您将在0x2处创建一个新列表,并替换变量acum中的指针。函数仍在查找0x1。在
你可以用
这会给你想要的行为。在
就像其他人提到的,你采取的方法可能不是一个好主意。完成我认为你所追求的目标的一种方法是使用闭包:
相关问题 更多 >
编程相关推荐