当前位置: 首页 > news >正文

C 语言调用 Python 代码

C 语言调用 Python 代码

在 C 语言中使用某个 Python 函数

// 使用到的 python 的 C API 的头文件
#include <Python.h>
#include <stdlib.h>int main(int argc, char**argv)
{// 获取 python 虚拟机的全局锁Py_Initialize();// 调用一条简单的 python 语句PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append(\"./\")");// 从文件系统中获取 python 文件的名字 multiply.py,生成一个 python 字符串PyObject *pName = PyUnicode_DecodeFSDefault("multiply");// 导入该 python 对应的文件,形成一个模块PyObject *pModule = PyImport_Import(pName);if(!pModule){fprintf(stderr, "cannot find module");return -1;}// 从模块中导入指定的函数PyObject *pFunc = PyObject_GetAttrString(pModule, "multiply");// 不再使用 pMoudle 变量,这里将其空间释放,Py_DECREF() 函数实际作用是减少对该变量的引用计数Py_DECREF(pModule);if(!pFunc){fprintf(stderr, "cannot find function");return -1;}// 检查 pFunc 是否可以被执行if(!PyCallable_Check(pFunc)){fprintf(stderr, "function check failed");return -1;}// 将函数需要的参数生成一个元组,"(dd)" 是格式化字符串,'d' 表示双精度浮点数PyObject *pArgs = Py_BuildValue("(dd)", 2.0, 3.0);// 调用函数 pFunc 和 参数 pArgs 进行处理PyObject *result = PyObject_CallObject(pFunc,  pArgs);Py_DECREF(pArgs);// 将从 python 得到返回值转化成 C 语言的类型double retval = PyFloat_AsDouble(result);Py_DECREF(result);fprintf(stderr, "retval is %f", retval);// 释放 python 解释器的全局锁Py_Finalize();return 0;}
def multiply(a,b):print("Will compute", a, "times", b)c = a * bprint("the result is ", c)return c

参考文档

调用协议

解析参数并构建值变量

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pycharm 创建python 初始化内容
  • Pytest简介及jenkins集成
  • 2024智慧竞技游戏俱乐部线下面临倒闭?
  • 五、python列表
  • 【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序
  • 华为OD 机试真题 - 分割均衡字符串(Python)
  • 认识sm1,sm2,sm3,sm4以及如何在Node.js实现
  • 如何解决隐藏游戏服务器的源IP问题
  • Windows 如何安装和卸载 OneDrive?具体方法总结
  • 基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
  • 数仓工具—Hive语法之事务表更新Transactional Table Update
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机
  • 南京邮电大学统计学课程实验2 用EXCEL进行参数估计假设检验 指导
  • camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程
  • Spring事件监听机制详解
  • JS题目及答案整理
  • Making An Indicator With Pure CSS
  • spark本地环境的搭建到运行第一个spark程序
  • Sublime text 3 3103 注册码
  • 基于遗传算法的优化问题求解
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 物联网链路协议
  • 线上 python http server profile 实践
  • python最赚钱的4个方向,你最心动的是哪个?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 选择阿里云数据库HBase版十大理由
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #{}和${}的区别是什么 -- java面试
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.each()与$(selector).each()
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (六)vue-router+UI组件库
  • (七)理解angular中的module和injector,即依赖注入
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Dubbo快速入门、介绍、使用
  • (转) ns2/nam与nam实现相关的文件
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)scrum常见工具列表
  • .NET CF命令行调试器MDbg入门(一)
  • .Net CF下精确的计时器
  • .Net 基于MiniExcel的导入功能接口示例
  • .net打印*三角形
  • .NET企业级应用架构设计系列之应用服务器
  • .Net小白的大学四年,内含面经
  • .ui文件相关
  • :“Failed to access IIS metabase”解决方法
  • @Autowired 与@Resource的区别
  • @EnableWebSecurity 注解的用途及适用场景
  • @Service注解让spring找到你的Service bean
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 蓝桥杯Web真题 ]-布局切换