ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

C++ でいう bind を python でやりたい

クロージャー作りたかったんですよ。

C++

using std::function;
using std::bind;
using namespace std::placeholders;

// 引数を3つ受け取る関数
void someFunction(int a, int b, int c)
{
  ...
};

int main()
{
  // someFunction に値を束縛してクロージャを作って
  auto closure = bind(&someFunction, _1, 0xB, _2);

  // それを呼び出す
  closure(0xA, 0xC); // somFunction(0xA, 0xB, 0xC) と等価
}

これと同様の事を python でもやりたい。

python(partial 使う)

from functools import partial

# 引数を3つ受け取る関数
def  someFunction(a, b, c):
  ...

if __name__ == '__main__':
  # someFunction に値を束縛してクロージャを作って
  closure = partial(someFunction, b=0xB)

  # それを呼び出す
  closure(0xA, 0xC) # somFunction(0xA, 0xB, 0xC) と等価

python(lambda 使う)

if __name__ == '__main__':
  # ラムダでなんとかする
  closure = lambda a, c: someFunction(a, 0xB, c)

  # それを呼び出す
  closure(0xA, 0xC) # somFunction(0xA, 0xB, 0xC) と等価

感想

DTMしたい…