繁体   English   中英

可以从C或其他语言空间调用带有* args / ** kwargs的Python函数吗?

[英]Can a Python function taking *args/**kwargs be called from C or another language space?

采用规范的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空间调用此函数的方法? 如何将上述三行转换为C等价?

请注意, 在一个类似的问题中 ,使用boost::python ,C ++调用这个关键字参数函数的语法几乎与Python相同,这是一个很好的办法!

要在Python / C中调用具有任意位置和关键字参数的function(*args, **kwds) ,等效于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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM