如何访问Python中编译的多个返回变量
How to access the multiple return variables compiled in python
我是编程的新手,我在c 中定义了一个函数,带有元组方法,用于两个返回的变量,在我编译文件后,在python文件中,我尝试访问两个返回的变量在已编译的动态库中,但它不起作用,当我尝试运行Python程序时,发生了分割错误。但是我实际上是从C 的单个返回变量成功的成功,我认为从Python访问两个返回的变量可能会有特殊的技巧。
以下是带有元组方法的两个返回变量的C 代码
std::tuple<double, double> Cassie2d::Step(ControllerTorque* action)
{
dyn_model_.setState(mj_data_->qpos, mj_data_->qvel);
dyn_state_.UpdateDynamicState(&dyn_model_);
mju_copy(mj_data_->ctrl, action->torques, nU);
mj_step(mj_model_, mj_data_);
return std::make_tuple(mj_data_->qacc,mj_data_->time);
Render();
}
以下是应用Python方法,由于两个返回的变量都是双型。
。lib.StepTorque.argtypes = [ctypes.c_void_p, ctypes.POINTER(ControllerTorque)]
lib.StepTorque.restype = ctypes.c_double
我猜restype
不仅等于ctypes.c_double
,因为它适用于一个返回的变量,并且可能对两个返回变量不起作用。
真的很感谢您的帮助!
使用 return std::make_tuple(mj_data_->qacc,mj_data_->time)
创建一个结构,该结构容纳两个变量,在括号中定义。如果将来自本机C 代码调用该函数,则应该可以使用std:tie,等式:
double a, b;
std::tie(a,b) = Step(arg);
但是,您需要直接从Python调用它,该语法完全不同,用于返回多个变量(C 对或元组是旁路缺少功能)。我在Python中看到了两个选项。
将您的C 函数两个回调给Python,并以这种方式分别发送变量:
void Cassie2d::Step(ControllerTorque* action, callback1, callback2) { dyn_model_.setState(mj_data_->qpos, mj_data_->qvel); dyn_state_.UpdateDynamicState(&dyn_model_); mju_copy(mj_data_->ctrl, action->torques, nU); mj_step(mj_model_, mj_data_); callback1(mj_data_->qacc); callback2(mj_data_->time); Render(); }
(建议)您可以尝试使用本机Python选项来服务多重返回。剩下的C 功能以其初始形式,然后以Python致电:
VarA, VarB = Step(action)
我假设您在Python代码中对
Cassie2d::Step(ControllerTorque* action)
方法有参考,但是您提供了很小的片段。
相关文章:
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- C++ 在编译时具有函数计算全局变量
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 可视化编译与 C++ 中的 Extern 变量
- 跨模板化函数编译的静态变量
- 在编译时为运行时设置环境变量
- 全局变量在 C++ 中是否显着提高了编译速度?
- 模板类编译问题与 typedef 变量
- constexpr 函数在编译时获取值,即使我的变量不是 constexpr
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- C++ 编译时在两个变量之间交替
- Constexpr变量不是编译时值
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 变量 std::fstream 文件具有初始值设定项,但类型不完整 编译错误
- 分配给静态变量的局部变量;编译错误在'c'但在 C++ 中成功
- 这是通过初始化 constexpr 变量来标记编译错误的合理跳转
- 使用全局变量初始化不同编译单元中的其他全局变量
- 用g++编译变量名为new的C代码时出错