首页 > 编程语言 >Qt C++ 调用 Python 之 PyObject* 数据类型转换

Qt C++ 调用 Python 之 PyObject* 数据类型转换

时间:2024-08-02 15:53:45浏览次数:18  
标签:类型转换 FromLong Qt PyLong Python C++ PyObject PyList

整数PyLong_FromLongPyLong_AsLong

  • 类型检查函数:PyLong_Check()
int cppInt = 42;
// C++ 整数转换为 Python 整数对象
PyObject* pyInt = PyLong_FromLong(cppInt); 
// Python 整数对象转换为 C++ 整数
long cppIntFromPy = PyLong_AsLong(pyInt);  
Py_DECREF(pyInt);

浮点数PyFloat_FromDoublePyFloat_AsDouble

  • 类型检查函数:PyFloat_Check()
double cppDouble = 3.14;
// C++ 浮点数转换为 Python 浮点数对象
PyObject* pyFloat = PyFloat_FromDouble(cppDouble);  
// Python 浮点数对象转换为 C++ 浮点数
double cppDoubleFromPy = PyFloat_AsDouble(pyFloat); 
Py_DECREF(pyFloat);

字符串PyUnicode_FromStringPyUnicode_AsUTF8

  • 类型检查函数:PyUnicode_Check()

在进行字符串转换时,确保使用正确的字符编码。Qt 的 QString 通常使用 UTF-16 编码,而 Python 的字符串对象使用 UTF-8 编码。

QString cppStr = "Hello, Python!";
// C++ 字符串转换为 Python 字符串对象
PyObject* pyStr = PyUnicode_FromString(cppStr.toUtf8().constData()); 
// Python 字符串对象转换为 C++ 字符串
const char* cppStrFromPy = PyUnicode_AsUTF8(pyStr); 
qDebug() << "C++ string from Python string:" << QString(cppStrFromPy);
Py_DECREF(pyStr);

列表:使用 PyList_* 系列函数

  • 类型检查函数:PyList_Check()
// 创建一个 Python 列表
PyObject* pyList = PyList_New(0);          // 创建一个空列表
PyList_Append(pyList, PyLong_FromLong(1)); // 添加元素 1
PyList_Append(pyList, PyLong_FromLong(2)); // 添加元素 2
PyList_Append(pyList, PyLong_FromLong(3)); // 添加元素 3

// 访问 Python 列表中的元素
for (Py_ssize_t i = 0; i < PyList_Size(pyList); ++i)
{
    PyObject* item = PyList_GetItem(pyList, i);
    long value = PyLong_AsLong(item);
    qDebug() << "List item" << i << ":" << value;
}

Py_DECREF(pyList);

字典:使用 PyDict_* 系列函数

  • 类型检查函数:PyDict_Check()
// 创建一个 Python 字典
PyObject* pyDict = PyDict_New();
 // 添加键值对 "key1": 1
PyDict_SetItemString(pyDict, "key1", PyLong_FromLong(1));
// 添加键值对 "key2": 2
PyDict_SetItemString(pyDict, "key2", PyLong_FromLong(2)); 

// 访问 Python 字典中的元素
PyObject* pyValue = PyDict_GetItemString(pyDict, "key1");
if (pyValue)
{
    long value = PyLong_AsLong(pyValue);
    qDebug() << "Value for key1:" << value;
}

Py_DECREF(pyDict);

标签:类型转换,FromLong,Qt,PyLong,Python,C++,PyObject,PyList
From: https://blog.csdn.net/qq_68194402/article/details/140871380

相关文章

  • Python 警告:重试(重试(总计=4,连接=无,读取=无,重定向=无,状态=无))
    我正在尝试pipinstall--upgradepip并保持收到此错误:WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby'ProxyError('Cannotconnecttoproxy.',NewConnectionError('<......
  • QT QProcess: Destroyed while process (“apple.exe“) is still running
    一、出错原因因为我这个程序是一直运行的,它会一直回显数据,如果你使用对象,start启动这个命令后,程序认为QProcess已经执行完毕,自动回收,但是此时程序正在执行中,所以无法销毁这个进程,导致出现这个问题。二、错误代码QStringcmd="./bin/apple.exe";QStringListargs;......
  • Qt之QProcess
    一、简介QProcess是Qt框架提供的一个类,用于在应用程序中执行外部进程。它提供了一系列函数来启动、控制和与外部进程进行交互。QProcess的一些重要特性和功能包括:启动外部进程:QProcess可以用于启动外部应用程序或命令行工具。通过start函数可以指定要执行的程序路径以及相关......
  • {Python} 有没有办法从函数中“提取”返回值变量并在其他地方使用它,而不调用原始函数?
    第一次在这里发帖。对python来说相对较新,我正在开发一个程序,它基本上是一个随机故事生成器,用于学习语言、发展技能并添加到我的投资组合中。我有一个主文件(最初启动该程序)、一个简介文件(对于介绍部分,获取用户名以及我试图“提取”user_name变量的位置),一个函数文件,其中包......
  • 为什么我在 Python 中的 Skip-Gram 实现会产生不正确的结果?
    我正在使用Python实现Word2Vec的Skip-Gram模型。然而,正如生成的嵌入及其可视化所示,我的模型似乎无法正常工作。这是嵌入的3D图的示例,它显示单词聚集在一起并重叠,因此很难区分它们:我怀疑问题在于我的实现而不是绘图函数。importnumpyasnpfromnltk.corpusimpor......
  • 基于SpringBoot的智能购房推荐系统-09040(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    Springboot智能购房推荐系统摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智......
  • Python 基础教学 - 开发规范
    Python基础教学-开发规范一、引言在Python编程中,遵循良好的开发规范是编写高质量、可维护代码的关键。本文将为您详细介绍Python开发中的一些重要规范,帮助您养成良好的编程习惯。二、代码布局缩进使用4个空格进行缩进,避免使用制表符。示例:ifTrue:p......
  • Python基础学习笔记(一)
    文章目录一、下载Python二、变量三、数据类型四、运算符五、语句六、容器类型七、函数function八、常用API九、面向对象类的创建:创建对象:实例成员:实例方法:类成员:静态方法:十、三大特征:封装、继承、多态十一、六大原则:Python基础学习笔记(二)一、下载Python官网:https......
  • 随机森林的可解释性分析(含python代码)
    随机森林的可解释性分析1.引言可解释性的重要性2.随机森林的原理2.1基本原理:2.2随机森林的实现3.随机森林的可解释性分析3.1特征重要性3.2特征重要性3.3SHAP值3.4部分依赖图(PDP)3.5交互特征效应3.6变量依赖图4.结论5.参考文献1.引言在机器学习领域,随机森林......
  • 【Python】模块
    1.模块的概念Python中有一种方法可以把定义放在一个文件里面,并在脚本或者解释器的交互实例中使用它们。这样的文件被称作Python的模块。2.自定义模块在Python中,自定义模块有两个作用,一个作用是规范代码,让代码更容易阅读;另一个作用是方便其他程序使用已经编写好的代码,提高开......