c语言python-如何让Python可以拥有C语言的飞速运行?从这里开始

原标题:如何让Python可以拥有C语言的飞速运行?从这里开始

171e9ed965024ee89d95c37ee76b74b7.png

众所周知,Python简单易用,好上手,十分适合各种开发,同时更适合非IT人士进行简单开发,和程序员交流。但是也有起局限性:

缺点:

1.代码不能加密

因为PYTHON是解释性语言,它的源码都是以明文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

2. 多线程支持不好

3.Python慢

Python相对C语言确实慢很多,但其实这里所指的速度慢在大多数时候我们是无法感知的,比如说,是用C语言程序开发了一个程序,执行需要花0.01秒,使用Python实现同样功能的程序,需要花0.1秒

的时间,虽然相差10倍,但是我们基本是感知不到的。更多的时候,程序慢是程序员实现功能方式导致的。就好像开罐头的时候,有的人用牙咬,有的人用工具,这样两个人的效率相比起来就差了很多。

今天我们就用和大家分享一下Python的C拓展,让它也可以有C的速度

36de8f02477b4e0f9a952918e4405f58.jpeg

1. 环境准备

如果是Linux只需要安装Python3.x + Python-dev。

Windows下稍微复杂点,VS2017 + Python3.6.3

VS2017可用社区版,需要选择安装的环境如下:

ebf4fbe9d117488a9f498a87580426d3.jpeg

2399d027c44e43ff965e93306507c684.jpeg

2. Hello World !

2.1 C模块封装

以计算两个数相加为例,选择任意文件夹,新建如下C语言源码:

c3f3ab97963148d28aa99f826a04822c.jpeg

其中,静态函数 calc_add 以python的C接口方式封装了add函数,命名方式 模块名_函数名

静态PyMethodDef列表 变量 CalcMethods 包含了该模块方法的描述

静态struct PyModuleDef结构体 变量 calcmodule 定义了模块的描述

PyInit_calc 函数初始化了模块,命名方式 PyInit_模块名

2.2 C源码编译

在VS2017中可以直接生成 .dll 文件,然后改名为 .pyd 就可在python程序中引入该模块了,但是,这不"清真",正确的姿势是写一个 setup.py然后通过python调cl.exe编译。

新建 setup.py文件,内容如下:

b841b5035ba944d8acea7f94cdb49e1f.jpeg

然后,从Windows的命令行(命令提示符)下进入到这个文件夹下,执行:

python setup.py build

即可完成编译,如果出现某

.bat

文件未找到,说明你的VS没有安装相应的依赖(Linux下编译不成功原因可能是没有装python-dev),按文章开头给出的依赖库添加修改(此时不需要重新安装VS)。

编译结束后,在该文件夹下会出现build文件夹,进入该文件夹,出现如下两个文件夹:

3f31c3c56ec54d65a53dba402e04775a.jpeg

进入lib.xxx那个文件夹,里面有个.pyd结尾的文件(Linux下为.so结尾),这就是我们编译好的python模块了,如下:

当然,你也可以改名为calc.pyd比较好看,不过这不影响调用。

2.3 Python调用

这部分就简单了,进入含有编译好的.pyd文件夹,新建如下文件:

这就是一个普通库,这样调用就OK了。

3. Python的参数传递以及C的返回值相关问题

这部分我直接甩出文件就行,编译及调用过程与上面一样。

C 文件

b21393d52ae049c485ea5a35f47f0916.jpeg

9c7193880f2a456081a79680d9e2cd67.jpeg

如果你选择了自学,我想给你提几点建议:

1.找浅显易懂,例程比较好的教程,从头到尾看下去。不要看很多本,专注于一本。把里面的例程都手打一遍,搞懂为什

么。

2.去找实际项目练手。最好是要有真实的项目做。可以找几个同学一起做个网站之类。注意,真实项目不一定非要是商业

项目。

3.最好能找到一个已经会python的人。问他一点学习规划的建议,然后在遇到卡壳的地方找他指点。这样会事半功倍。

4.另外,除了学习编程语言,也兼顾补一点计算机基础,和英语。

5.不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别

人的代码。

6.学会查文档,用好搜索引擎和开发者社区。

就是以上这些,希望你能有所收获。

如果对这方面感兴趣或者在学习Python的过程中有什么问题的话,可以加君羊:588090942,君羊内有大量Python资料,也会有人解答问题,大家一起学习,一起交流。希望每位学习Python的人都能学有所成。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值