缘由

稀里糊涂的,用 Python 或用 C++ Qt都能写点小程序出来。然后对Python + Qt开始有点兴趣:想学PyQt4,想了解PythonQt,也期待PySide的Windows版本。但总觉得这三个东西都蛮神秘的,看看资料也总是似懂非懂

怎么办呢?还是从基础开始吧:应该是就是 Python 与 C 的相互调用了(先找找资料,整理一下思路)

Python 与 C

Python 与 C 的相互交互方式可看成有两种:

扩展:从 Python 中调用 C

嵌入:从 C 中调用 Python

python manual

其他:

Programming Python 第22章、第23章

Python C API 使用心得

Python与C之间的相互调用(Python C API及Python ctypes库)

Python 调用 C 模块

用 Python 来调用 C 模块,即:用 C 来扩展 Python。

需要写C代码

编译成动态库

比如 我们编写一个 C 函数

void abcd()

{

}

然后将其编译成 abcd.dll

但要使得 C 能被 Python 调用,仅这样还不行,我们写的C的代码需要遵循某种规则,只有这样,Python才能识别这个模块

比如:我们想用下面的代码来调用 上面的函数:

import abcd

abcd.abcd()

首先,需要 abcd 这个模块,.dll不行,不过将其改成.pyd 后python就理会它了

然后,python 将从 .pyd 中调用 initabcd() 来完成模块的初始化

也就是说,我们需要一个函数

PyMODINIT_FUNC initabcd();

该初始化函数将告诉Python它有哪些函数,这是通过一个结构数组来实现的

static struct PyMethodDef anyname[]={}

我们需要将我们前面的函数信息添加到该结构数组中,然后在前面的init函数中将该数组注册,但是,一开始的函数还是不能直接用,我们需要

static PyObject * wrap(PyObject * self, PyObject * args)

Python 要求这样用这样的函数。这样一来,就理通了:

编写我们自己的函数 abcd

编写符合python要求的 wrap 来调用 abcd

将 wrap 函数的信息以及我们想要的名字 "abcd" 放入结构数组

在 init 函数中将该 结构数组进行注册

python和c学习-学习 Python与C相互调用相关推荐

  1. python是不是脚本_关于Python是不是脚本语言的探讨

    很多人认为Python是单纯的脚本语言,认为它是一门简单的语言.其实,脚本语言并不是所谓的简单,而是简洁.Python可以使得一些复杂的编程任务变得简单而不是简单的编程语言.所以要是给Python一个 ...

  2. python值得报班学习吗

    python值得报班学习吗?最近有很多想要学习Python的同学都会问到这个问题,Python在近几年的发展前景是非常不错的,想要学会Python编程语言,建议还是报班学习,来看看下面的详细介绍吧. ...

  3. 四月青少年编程组队学习(Python一级)Task02

    电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...

  4. 四月青少年编程组队学习(Python一级)Task01

    电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...

  5. 赠书 | 干货!用 Python 动手学强化学习

    01 了解强化学习 新闻报道中很少将强化学 习与机器学习.深度学习.人工智能这些关键词区分开来,所以我们要先介绍什么是强化学习,再讲解其基本机制. 强化学习与机器学习.人工智能这些关键词之间的关系: ...

  6. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  7. 【python教程入门学习】Python零基础入门爬虫项目

    Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...

  8. 学python多贵_老男孩学习Python多少钱,学习Python贵吗?

    而且现在不少人都想要参加python培训,在进行python培训之前,大家最关注的的莫过于培训机构好不好的问题了,当然了收费也是我们需要考虑的一点.当然选择培训机构不能只看费用方面的,还需要考虑师资力 ...

  9. python使用Spacy迁移学习库进行句法分析实战

    python使用Spacy迁移学习库进行句法分析实战 目录 使用Spacy迁移学习库进行句法分析实战 Spacy

  10. 如何用 Python 进行基于深度学习的计算机视觉项目开发?

    令人惊喜的"智能"年代 深度学习有着广阔的前景 我们正处在一个"智能"的年代,比如智能手机中的语音助手.机器翻译和人脸识别:战胜过日本将棋冠军.国际象棋冠军, ...

最新文章

  1. 一.Linq to JSON是用来干什么的?
  2. 基本url是由协议服务器,http协议基础之URL
  3. 69 session和cookie的区别
  4. 怎么在Word中插入歌曲
  5. python 数据库查询系统_python查询数据库操作系统
  6. 10个性鼠标指针主题包_游戏鼠标推荐
  7. HUT-XXXX Strange display 容斥定理,线性规划
  8. opencv python安装 centos_在Ubuntu中安装OpenCV-Python
  9. Oracle数据库操作基本语法
  10. python arp断网攻击_arp断网攻击,小编教你arp断网攻击怎么解决
  11. 如何用亿图软件绘制甘特图
  12. [HTB]Nunchucks
  13. 网络安全笔记-Web架构
  14. python语言format是什么意思_Python代码中str.format()函数有什么功能呢?
  15. JAVA微信小程序在线教育视频学习小程序系统毕业设计 开题报告
  16. 谷歌浏览器登录问题解决
  17. UDS - 10.2 DiagnosticSessionControl (10) service
  18. 基于机器学习的【肺癌风险分析预测】
  19. drawRect绘图
  20. 【教程】制作能在ARM板上直接运行的gcc本地编译器

热门文章

  1. 打印正整数n之内的斐波那契数列
  2. 【repost】JavaScript Scoping and Hoisting
  3. echarts入门基础,画折线图
  4. Python中sys模块详解
  5. Windows+Nginx+IIS做图片分布式存储详细步骤
  6. cdn大全 jquery/jqueryUI/Dojo/MooTools/Prototype
  7. Spring Framework(框架)整体架构
  8. 20181029NOIP模拟赛T2
  9. BZOJ1433 [ZJOI2009]假期的宿舍 - 二分图匹配
  10. 00设计模式——指导规则