每次调用 python API 时,是否都会调用 pybind11 默认参数表达式?
Does pybind11 default arugments expression been called every time when the python API been invoked?
我正在尝试将表达式作为默认参数添加到我的 python 函数 API,它由 pybind11 实现。
例如,这是 C++ 函数:
void my_print(std::chrono::system_clock::time_point tp = std::chrono::system_clock::now()) {
std::cout << tp << std::endl;
}
PYBIND11_MODULE(my_module, m) {
m.doc() = "my python module implement in pybind11";
m.def("my_print", &my_print, py::arg("tp") = std::chrono::system_clock::now());
}
现在我想知道,表达式 = std::chrono::system_clock::now()
,我希望每次在 python 脚本中调用此 my_print
API 时都调用它。
但我不确定,是否每次在 python 中调用此 API 时都会调用此表达式?或者这个表达式只在这个 python 模块被加载到 python 时被调用一次 ?
这在 pybind 绑定的(运行时)初始化期间被评估一次。
此功能的实现方式是 py::arg
的 overloading operator=
到 return 不同的类型,py::arg_v
(具有默认值的参数的缩写)。
我正在尝试将表达式作为默认参数添加到我的 python 函数 API,它由 pybind11 实现。
例如,这是 C++ 函数:
void my_print(std::chrono::system_clock::time_point tp = std::chrono::system_clock::now()) {
std::cout << tp << std::endl;
}
PYBIND11_MODULE(my_module, m) {
m.doc() = "my python module implement in pybind11";
m.def("my_print", &my_print, py::arg("tp") = std::chrono::system_clock::now());
}
现在我想知道,表达式 = std::chrono::system_clock::now()
,我希望每次在 python 脚本中调用此 my_print
API 时都调用它。
但我不确定,是否每次在 python 中调用此 API 时都会调用此表达式?或者这个表达式只在这个 python 模块被加载到 python 时被调用一次 ?
这在 pybind 绑定的(运行时)初始化期间被评估一次。
此功能的实现方式是 py::arg
的 overloading operator=
到 return 不同的类型,py::arg_v
(具有默认值的参数的缩写)。