将python代码转化为c语言代码,提高运行效率
将python代码转化为c语言代码,提高运行效率
首先,需要安装cpython库:
pip install cython
安装完成之后,写一段简单的代码,例如下面这个利用递归求斐波那契数列的函数,然后保存为.pyx文件:
def fib(n):
return 1 if n ==1 or n == 2 else fib(n - 1) + fib(n - 2)
我将它保存为fib.pyx文件
然后再创建一个文件,文件的内容如下:
from setuptools import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('fib.pyx'))
我将它重命名为translate.py文件。这个文件的作用是调用 Cython 的cythonize函数把 Python 代码转换为 C 代码。
还有一个要提醒的地方是里面的文件路径,这里是将他们放在同一个目录下。
接下来编译代码:
进入命令行,cd转入那两个文件所在的文件目录,然后输入如下指令
python translate.py build_ext --inplace
如果你的命令行出现如下错误:

就需要安装visual studio c++ 14.0
安装好了之后继续执行上面给的命令,就会成功:

成功之后再创建一个测试文件test.py:
import time
from fib import fib
start = time.time()
result = fib(20)
end = time.time()
print('斐波那契数列第20项为'+ str(result)+'耗时:'+str(end - start)+'秒')
现在我的文件目录是这样的:

下面运行test.py文件:
斐波那契数列第40项为102334155耗时:5.765635251998901秒
运行如下代码耗时为:
import time
def fib(n):
return 1 if n ==1 or n == 2 else fib(n - 1) + fib(n - 2)
start = time.time()
result = fib(40)
end = time.time()
print('斐波那契数列第20项为'+ str(result)+'耗时:'+str(end - start)+'秒')
斐波那契数列第40项为102334155耗时:27.247100830078125秒
另外注意:import只会从后缀为.py/.pyc/.pyo/.so/.pyd的文件中导入模块
将python代码转化为c语言代码,提高运行效率的更多相关文章
- HTML-参考手册: HTML 语言代码
ylbtech-HTML-参考手册: HTML 语言代码 1.返回顶部 1. HTML 语言代码 参考手册 ISO 语言代码 HTML 的 lang 属性可用于声明网页或部分网页的语言.这对搜索引擎和 ...
- 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径
模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...
- 详解python3如何调用c语言代码
本文链接:https://blog.csdn.net/u012247418/article/details/80170690开发环境linux: python3.5.2 + ubuntu-gnome- ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- ZZC语言代码风格
程序员之路--关于代码风格 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象.初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格.本文就代码风格中的几个重点问题进行了讨论,并在文后给 ...
- 浅谈c语言代码段 数据段 bss段
代码段.数据段.bss段 (1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. (2)代码段:代码段就是程序中的可执行部分,直观理解 ...
- Python 工匠:编写条件分支代码的技巧
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』 ...
- python基础知识-8-三元和一行代码(推导式)
python其他知识目录 1.三元运算(三目运算) 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式:[on_true] if [expression] else [on_false]re ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
随机推荐
- [转载]Windows 2008多用户同时远程登陆配置方法
有些朋友需要在在使用Windows 2008远程登录功能时,进行多用户登录,那么就可以采用以下配置方法: 首先要启用远程桌面这一功能:右击"我的电脑"→ 属性 → 远程配置 → 远 ...
- CF891B-Gluttony【构造】
正题 题目链接:https://www.luogu.com.cn/problem/CF891B 题目大意 给出\(n\)个数字互不相同的一个序列\(a\),求它的一个排列\(b\),使得选出任意一个\ ...
- P4424-[HNOI/AHOI2018]寻宝游戏【结论】
正题 题目链接:https://www.luogu.com.cn/problem/P4424 题目大意 \(n\)个\(m\)位二进制数,开始是一个\(0\). 然后依次对所有二进制数进行\(n\)次 ...
- Maven----将手动下载的jar包以命令行的方式安装到本地MavenRepository中
1.情景再现:准备实现SprintBoot的热部署功能,因没有对应jar时,在Eclipse中mvn install 会报错: 报错信息: [INFO] --- spring-boot-maven-p ...
- 关于docker复现vulhub环境的搭建
原本想用docker复现一下vul的漏洞. 装docker过程中遇到了很多问题, 昨天熬夜到凌晨三点都没弄完. 中午又找了找原因,终于全部解决了, 小结一下. 0x01 镜像 去官方下载了centos ...
- Polya 定理 学习笔记
群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...
- wqs二分 学习笔记
wqs二分学习笔记 wqs二分适用题目及理论分析 wqs二分可以用来解决这类题目: 给你一个强制要求,例如必须\(n\)条白边,或者划分成\(n\)段之类的,然后让你求出最大(小)值.但是需要满足图像 ...
- appium启动ios系统上面的app需求的参数
Appium启动APP至少需要7个参数 'platformVersion','deviceName'.'udid'.'bundleId'.'platformName'.'automationName ...
- TCP三次握手四次挥手,通俗易懂版
三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...
- 小白自制Linux开发板 七. USB驱动配置
本文章基于https://whycan.com/t_3087.htmlhttps://whycan.com/t_6021.html整理 F1c100s芯片支持USB的OTG模式,也就是可以通过更改Us ...