使用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扩展库的主要内容,如果未能解决你的问题,请参考以下文章

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11来快速开发python程序扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库