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 プロットがあります (座標ごとに 1 つ)。それぞれに SpanSelector があります。これは、何らかの理由で 2 つの制限ポイントのみをコールバック関数に渡すように設計されています。ただし、それらはすべて同じコールバック関数を持っています。ので、私は持っています:

def span_selected(min, max):

しかし、私は必要です

def span_selected(which_coordinate, min, max):

コールバックを登録する時点ではもちろん座標はわかっていますが、関数を呼び出すときには座標を知る必要があります。Javascriptでは、次のようなことをします

callback = span_selected.bind(null, coordinate)

私はPythonで何をしますか?

4

1 に答える 1

6

ここですでに回答されていることが判明しました: 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)
于 2013-10-07T05:31:39.983 に答える