很多人仅在性能方面将Python与C进行了比较,没有在快速开发方面比较,就开始抱怨Python太慢了。Python的优点在于,其开发时间非常短,你不必处理指针、内存管理等问题。
多数情况下,开发时间比性能更重要。Python有一个很棒的社区,其中有很多很好的库,很多需求在那都能得到满足。
话虽如此,如果想让Python代码更快该怎么做呢?来试试Cython吧!
Cython: Python的C扩展
如果你同时喜欢Python的简单语法以及C的高性能,那么Cython就是你想要的。你可以使用Cython为Python编写C扩展,其代码将转换为优化的C / C ++代码。它可以提供高性能,且能在Python项目中使用。

安装Cython
这需要C编译器,你可以根据自己的操作系统安装一个C编译器,然后需要使用如下命令安装Cython:
pipinstall Cython
从静态类型声明中获益
可以将静态类型声明添加到变量和函数,它将提供更好的性能。你可以将所有C类型如int,float,double等用于声明。
在Cython中声明变量
cdef int i =10
这句命令的基本意思是声明一个变量i,它是一个整数。
在Cython中声明函数
cdef intsquare(int x):    return x ** 2
该命令基本上意味着square函数采用整数x作为参数并返回整数值x ** 2,即x的平方。导入模块时,cdef声明的函数对Python代码不可见。为了使其可见需要改用cpdef。
在Python中计算阶乘
编写一个Python函数来计算给定整数的阶乘:
effactorial(n):                       if  n >=1:                           return n *factorial(n -1)                       return1
使用Cython让Python更快

首先,要创建一个pyx文件。
cpdef longfastfactorial:此函数将返回一个long值,因此我们通过在函数名fastfactorial之前放置long来声明它的类型为long。
long n:我们预期n为long值。
cpdef long fastfactorial(long n):                                if  n >=1:                                    return n * fastfactorial(n-1)                                return1
接着,我们需要创建一个setup.py文件来将Cython转换为C。
from distutils.core import setup                     fromCython.Buildimport cythonize                     setup(ext_modules =cythonize('fastfac.pyx'))
编译代码
为执行编译,需要运行以下命令:
python3setup.py build_ext –inplace
--inplace:此选项会在你的工作目录中创建一个共享对象文件。
对比
让我们比较一下二者:
from fastfac import fastfactorial                   from fac import factorial                   from timeit import timeit                                     print(timeit('fastfactorial(20)', globals=globals(), number=10000))  #output: 0.002164322999306023                   print(timeit('factorial(20)', globals=globals(), number=10000))  #output: 0.18900858898996376
结果惊人,Cython快将近88倍!

只需稍加润色,就可使Python代码的运行速度大幅提高。本文还仅仅只是一个示例,你可以对其进行进一步优化,效果可能会更好!如果大家对Python感兴趣的话,可以加一下我的微信哦:abb436574,免费领取一套学习资料和视频课程哟~

嫌Python太慢了?让Cython带你飙车吧相关推荐

  1. 【源代码】Python制作的赛车小游戏,逆行飙车

    python制作的赛车小游戏,逆行飙车,通过键盘方向键控制 程序运行截图 源代码 import pygame, sys, time, random# pygame 初始化 pygame.init() ...

  2. python不想学了-嫌Python太慢但又不想学C/C++?来了解下JIT技术

    什么是 JIT Python 是门多才多艺的语言,既可以写后端,也可以做数据分析,既可以智能化运维,也可以搞渗透,既可以写爬虫,又可以做机器学习深度学习.然而,Python 的缺点也很明显,它的速度有 ...

  3. python 多核并行计算_手把手 | 嫌Python太慢?并行运算Process Pools三行代码给你4倍提速!...

    大数据文摘作品,转载要求见文末 作者 | Adam Geitgey 编译 | 元元.Lisa.Saint.Aileen 原文链接 | https://medium.com/@ageitgey/quic ...

  4. python 多核并行计算_嫌Python太慢?并行运算Process Pools三行代码给你4倍提速!

    大数据文摘作品,转载要求见文末,作者 | Adam Geitgey,编译 | 元元.Lisa.Saint.Aileen. Python绝对是处理数据或者把重复任务自动化的绝佳编程语言.要抓取网页日志? ...

  5. Python制作的赛车小游戏源代码,逆行飙车

    python制作的赛车小游戏,逆行飙车,通过键盘方向键控制 程序运行截图: 源代码 import pygame, sys, time, random# pygame 初始化 pygame.init() ...

  6. python修改文件名称唯美_5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了...

    原创:小dull鸟 python数据分析之禅 原文链接: 5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了​mp.weixin.qq.com 有时候我们做数据可视化并 ...

  7. 0基础学python培训班_[长文] 学Python不用培训班,一篇文章带你入门

    最近有许多小伙伴后台联系我,说目前想要学习Python,但是没有一份很好的资料入门.一方面的确现在市面上Python的资料过多,导致新手会不知如何选择,另一个问题很多资料内容也很杂,从1+1到深度学习 ...

  8. pythonocr训练模型_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...

    English README. cnocr 使用交流QQ群 欢迎扫码加入QQ交流群: Release Notes Update 2020.04.21: 发布 cnocr V1.1.0 V1.1.0对代 ...

  9. python中for循环是可以带else的

    python中for循环是可以带else的,不满足for循环的条件,可以执行ELSE的内容!#!user/bin/env python #-*-coding:utf-8 -*- # Author: S ...

最新文章

  1. eclipse问题 - windows版
  2. Angular2学习笔记——NgModule
  3. C++语言基础(15)-友元函数和友元类
  4. C++基于多态实现依赖颠倒原则附源码
  5. apache的rewrite规则无法加载问题
  6. Spring的Java配置
  7. 局域网聊天软件 设计文档怎么写?
  8. stm32移植freemodbusRTU(HAL库+Freertos)主机
  9. 理论应用实例水杯_PLC应用,3个PID控制实例讲解,想不会都难!
  10. Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v3 u66.docx Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v2 s66 开发方法论与效率提
  11. Fingerprint has already been taken
  12. 获取任意一个微信小程序码的两种方式
  13. android studio使用开源项目,gogo电子竞技-gogo电子竞技
  14. python 对象的销毁_python对象销毁(垃圾回收)
  15. Tableau可视化项目
  16. input输入框 去掉外边框 解决方案
  17. HC-02蓝牙串口模块的配置和使用
  18. 【AndroidStudio】按钮基本操作(普通按钮、图片按钮、单选按钮设置)(单击事件监听器触发对话框和页面跳转)
  19. 【iOS】iPhone4 无SHSH备份如何降级至6.1.2版本?
  20. JAVA完全参考手册(第8版) 第1章至第5章

热门文章

  1. 互联网晚报 | 1月25日 星期二 | 知乎首次举办上星晚会;微信视频号上线首个付费直播间;淘宝天猫“春节不打烊”活动正式上线...
  2. 互联网日报 | 新东方二次上市通过港交所聆讯;陌陌宣布任命新CEO;广汽蔚来发致歉声明...
  3. esxi 6.7 update 3 3b_污水站运维系统,3大要点让你吃透运维本质
  4. 2017第四届中国国际大数据大会成功召开
  5. 【数字逻辑设计】Logisim构建三种多路选择器
  6. Linux服务器---phpMyAdmin
  7. 域名解析中“TTL”是什么意思?
  8. IDEA中的HTTP Client Editor测试API
  9. API设计原则(觉得太合适,转发做记录)
  10. RHEL账号总结一:账号的分类