每次调用 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::argoverloading operator= 到 return 不同的类型,py::arg_v(具有默认值的参数的缩写)。