7

次のように定義された正規の Python 関数を使用します。

def foo(*args, **kwargs):
  print("args:", len(args))
  for i in args:
    print(i)

  print("kwargs:", len(kwargs))
  for k in kwargs:
    print(k, kwargs[k])

この関数を Python から呼び出すと、次のようになります。

some_list = ['one', 'two', 'three']
some_kwords = { "name1" : "alice", "name2" : "bob", "name3" : "carol" }

foo(*some_list, **some_kwords)

Python C API は、C 空間からこの関数を呼び出す方法を提供していますか? 上記の 3 行を C の同等の行に変換するにはどうすればよいでしょうか?

同様の質問で、 を使用してboost::python、C++ がこのキーワード引数関数を Python とほぼ同じ構文で呼び出すことに注意してください。これはかなりのトリックです!

4

1 に答える 1

5

Python/C で任意の位置引数とキーワード引数を使用して関数を呼び出すには、次のfunction(*args, **kwds)構文を使用しますPyObject_Call

/* error checking omitted for brevity */
PyObject *some_list = PyObject_BuildValue("(sss)", "one", "two", "three");
PyObject *some_kwords = PyObject_BuildValue("{s:s,s:s,s:s}",
                          "name1", "alice", "name2", "bob", "name3", "carol");
PyObject *ret = PyObject_Call(foo, some_list, some_kwords);
Py_DECREF(some_list);
Py_DECREF(some_kwords);
于 2013-01-17T03:49:39.660 に答える