使用pybind11开发python扩展库
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pybind11开发python扩展库相关的知识,希望对你有一定的参考价值。
Keyword-Only 参数
在python 3引入Keyword-Only参数,目前在pybind11也提供了支持。
对这个星号*的定义和描述在[PEP 3102]中。星号可以以一个参数的形式出现在函数声明中的参数列表中,但星号之后的所有参数都必须有关键字(keyword),这样在函数调用时,星号*之后的所有参数都必须以keyword=value的形式调用,而不能以位置顺序调用。
def f(a, *, b): # a can be positional or via keyword; b must be via keyword
pass
f(a=1, b=2) # good
f(b=2, a=1) # good
f(1, b=2) # good
f(1, 2) # TypeError: f() takes 1 positional argument but 2 were given
看上面的函数,就可以发现在中间多了一个星号,在这个星号之前的参数,可以采用关键字参数,也可以采用位置参数,但是在星号之后必须采用关键字参数,否则就会提示出错。在pybind11提供py::kw_only来设置这样的功能。
m.def("f", [](int a, int b) { /* ... */ },
py::arg("a"), py::kw_only(), py::arg("b"));
上面在参数中间插入了py::kw_only,这样在python调用不对时,就会提示上面的错误。
不过,要注意的一点,就是不要与py::args参数
以上是关于使用pybind11开发python扩展库的主要内容,如果未能解决你的问题,请参考以下文章