Python替代Javascript function.bind()?

时间:2013-10-07 05:23:47

标签: javascript python callback bind

在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中会做什么?

1 个答案:

答案 0 :(得分:4)

原来已经在这里回答:How to bind arguments to given values in Python functions?

解决方案是:

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)