15 auto kw_func = [](
int x,
int y) {
return "x=" + std::to_string(
x) +
", y=" + std::to_string(y); };
18 m.def(
"kw_func0", kw_func);
19 m.def(
"kw_func1", kw_func, py::arg(
"x"), py::arg(
"y"));
20 m.def(
"kw_func2", kw_func, py::arg(
"x") = 100, py::arg(
"y") = 200);
21 m.def(
"kw_func3", [](
const char *) { }, py::arg(
"data") = std::string(
"Hello world!"));
24 std::vector<int>
list{{13, 17}};
25 m.def(
"kw_func4", [](
const std::vector<int> &entries) {
26 std::string ret =
"{";
28 ret += std::to_string(
i) +
" ";
31 }, py::arg(
"myList") =
list);
33 m.def(
"kw_func_udl", kw_func,
"x"_a,
"y"_a=300);
34 m.def(
"kw_func_udl_z", kw_func,
"x"_a,
"y"_a=0);
37 m.def(
"args_function", [](py::args
args) -> py::tuple {
40 m.def(
"args_kwargs_function", [](py::args
args, py::kwargs
kwargs) {
45 m.def(
"mixed_plus_args", [](
int i,
double j, py::args
args) {
48 m.def(
"mixed_plus_kwargs", [](
int i,
double j, py::kwargs
kwargs) {
51 auto mixed_plus_both = [](
int i,
double j, py::args
args, py::kwargs
kwargs) {
54 m.def(
"mixed_plus_args_kwargs", mixed_plus_both);
56 m.def(
"mixed_plus_args_kwargs_defaults", mixed_plus_both,
57 py::arg(
"i") = 1, py::arg(
"j") = 3.14159);
62 #define GC_IF_NEEDED ConstructorStats::gc()
66 m.def(
"arg_refcount_h", [](py::handle h) {
GC_IF_NEEDED;
return h.ref_count(); });
67 m.def(
"arg_refcount_h", [](py::handle h, py::handle, py::handle) {
GC_IF_NEEDED;
return h.ref_count(); });
68 m.def(
"arg_refcount_o", [](py::object o) {
GC_IF_NEEDED;
return o.ref_count(); });
69 m.def(
"args_refcount", [](py::args a) {
71 py::tuple t(a.size());
72 for (
size_t i = 0;
i < a.size();
i++)
74 t[
i] = (
int) Py_REFCNT(PyTuple_GET_ITEM(a.ptr(),
static_cast<py::ssize_t>(
i)));
77 m.def(
"mixed_args_refcount", [](py::object o, py::args a) {
79 py::tuple t(a.size() + 1);
81 for (
size_t i = 0;
i < a.size();
i++)
83 t[
i + 1] = (
int) Py_REFCNT(PyTuple_GET_ITEM(a.ptr(),
static_cast<py::ssize_t>(
i)));
99 py::kw_only(), py::arg(
"i"), py::arg(
"j"));
100 m.def(
"kw_only_some", [](
int i,
int j,
int k) {
return py::make_tuple(
i, j, k); },
101 py::arg(), py::kw_only(), py::arg(
"j"), py::arg(
"k"));
102 m.def(
"kw_only_with_defaults", [](
int i,
int j,
int k,
int z) {
return py::make_tuple(
i, j, k, z); },
103 py::arg() = 3,
"j"_a = 4, py::kw_only(),
"k"_a = 5,
"z"_a);
105 "i"_a, py::kw_only(),
"j"_a);
106 m.def(
"kw_only_plus_more", [](
int i,
int j,
int k, py::kwargs
kwargs) {
108 py::arg() , py::arg(
"j") = -1 , py::kw_only(), py::arg(
"k") );
110 m.def(
"register_invalid_kw_only", [](py::module_
m) {
112 py::kw_only(), py::arg() ,
"j"_a);
117 py::arg(
"i"), py::arg(
"j"), py::pos_only());
119 py::arg(
"i"), py::pos_only(), py::arg(
"j"));
120 m.def(
"pos_kw_only_mix", [](
int i,
int j,
int k) {
return py::make_tuple(
i, j, k); },
121 py::arg(
"i"), py::pos_only(), py::arg(
"j"), py::kw_only(), py::arg(
"k"));
122 m.def(
"pos_only_def_mix", [](
int i,
int j,
int k) {
return py::make_tuple(
i, j, k); },
123 py::arg(
"i"), py::arg(
"j") = 2, py::pos_only(), py::arg(
"k") = 3);
133 struct KWClass {
void foo(
int,
float) {} };
134 py::class_<KWClass>(
m,
"KWClass")
135 .def(
"foo0", &KWClass::foo)
136 .def(
"foo1", &KWClass::foo,
"x"_a,
"y"_a);
140 m.def(
"class_default_argument", [](py::object a) {
return py::repr(a); },
141 "a"_a = py::module_::import(
"decimal").attr(
"Decimal"));