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