1

在 Javascript 中,可以写

var ids = ['item0', 'item1', 'item2', 'item3']; // variable length
function click_callback(number, event)
{
    console.log('this is: ', number);
}
for (var k = 0; k < ids.length; k += 1)
{
    document.getElementById(ids[k]).onclick = click_callback.bind(null, k);
}

所以我可以将注册时的值传递给回调函数,k即使它在调用函数时已经改变。

Python有办法做一些等效的事情吗?


具体情况是这样的(但我更喜欢笼统的回答):

我有可变数量的 matplotlib 图(每个坐标一个)。每个都有一个 SpanSelector,出于某种原因,它被设计为仅将两个限制点传递给回调函数。但是,它们都有相同的回调函数。所以我有:

def span_selected(min, max):

但是我需要

def span_selected(which_coordinate, min, max):

注册回调的时候当然知道坐标,但是调用函数的时候需要知道。在Javascript中,我会做类似的事情

callback = span_selected.bind(null, coordinate)

我会在 Python 中做什么?

4

1 回答 1

6

原来它已经在这里得到了回答:如何将参数绑定到 Python 函数中的给定值?

解决方案是:

from functools import partial
def f(a,b,c):
    print a,b,c
bound_f = partial(f,1)
bound_f(2,3)

MattH的全部学分。

编辑:所以在示例中,而不是

callback = span_selected.bind(null, coordinate)

利用

callback = partial(span_selected, coordinate)
于 2013-10-07T05:31:39.983 回答