cython编译Python教程,python安装

  cython编译Python教程,python安装

  CPython-教程-zh中文解释器教程

  简述计算机编程语言有时候太慢,如果手动编译C或者是C来写#includePython.h的文件也比较麻烦。

  解释器无疑是一个比较好的选择。

  这篇教程是基于

  塞顿街https://号。阅读文档。io/en/latest/src/tutorial/cy thon _ tutorial。超文本标记语言

  同时也参考了http://docs.cython.org/en/latest/但我会在这个的基础上做一些补充。

  同样,这个项目,我会持续更新到开源代码库上https://github.com/Sean16SYSU/CPython-Tutorial-zh改进的理由来源于链接一的

  每一行的计算量很少,因此大蟒解释器的开销就会变的很重要。数据的局部性原理:很可能是,当使用C的时候,更多的数据可以塞进中央处理器的躲藏中,因为计算机编程语言的元素都是对象,而每个目标都是通过字典实现的,缓存对这个数据不很友好。项目你好世界项目第一个项目是你好世界。

  创建一个文件helloworld.pyx,内容如下:

  print(Hello world!)保存后,创建setup.py文件,内容如下:

  从distutils.core导入设置从Cython .构建导入cytonize setup(ext _ modules=cytonize( hello world。pyx ))保存后,命令行进入setup.py所在目录,并输入python设置。py build _ ext-就地,如下:

  PS D:\ Code \ CPython \ Test python setup。py build _ ext-在位编译helloworld.pyx因为改了细胞化你好世界。pyx运行build _ ext构建“hello world”扩展创建建设创建build\temp.win-amd64-3.6创建构建\临时。win-amd64-3.6 \ ReleaseC:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14。13 .26128 \ bin \ host x86 \ x64 \ cl。exe/C/NO logo/Ox/W3/GL/dn debug/1(x86)\ Windows Kits \ NETFXSDK \ 4。6 .1 \ lib \ um \ x64 /LIBPATH:C:\ Program Files(x86)\ Windows Kits \ 10 \ lib \ 10。0 .16299 .0 \ ucrt \ x64 /LIBPATH:C:\ Program Files(x86)\ Windows Kits \ 10 \ lib \ 10。0 .16299 .0 \ um \ x64 /EXPORT:py init _ hello world build \ temp。win-amd64-3正在创建库构建\临时。win-amd64-3.6 \发布\ hello world。cp36-win _ amd64。解放运动和对象构建\临时。win-amd64-3.6 \发布\ hello world。cp36-win _ amd64。经历正在生成代码已完成代码的生成在该目录下的命令行进入计算机编程语言操作界面,导入包之后,就会自动输出你好世界!如下:

  PS D:\ Code \ CPython \ Test python python 3。6 .6(第3节。6 .6:4c f1 f 54 EB 7 2018年6月27日03:37:03)[MSC v . 1900 64位(AMD64)]在win 32上键入“帮助”、“版权”、“致谢”或"许可证"以了解更多信息。导入helloworldHello世界!这就完成了一个简单的解释器的扩展书写。下面再举例子。

  斐波那契函数项目斐波那契数列:1, 1, 2, 3, 5,…

  前两位为1,之后每个数等于前面两个数之和。

  创建fib.pyx,内容如下:

  from _ _ future _ _ import print _ function def fib(n):a,b=0,1 while b n: print(b,end= ) a,b=b,a b print()创建setup.py文件,内容如下:

  从distutils.core导入设置从Cython .构建导入cytonize setup(ext _ modules=cytonize( fib。pyx ))通过命令python设置。py build _ ext-就地,生成出来的文件:

  导入fibfib.fib(100)输出:

  1 1 2 3 5 8 13 21 34 55 89 但是经过测试之后,发现速度并没有很高的提升,很可能是操作本来就很简单,数值也很小,没什么优化的空间了1000个素数。项目给一个数值n,输出前n个质数(列表).

  写到primes.pyx中:

  def primes(int nb _ primes):cdef int n,I,len _ p cdef int p[1000]if nb _ primes 1000:nb _ primes=1000 len _ p=0n=2 while len _ p nb _ primes:for I in p[:len _ p]:if n % I==0:break else:p[len _ p]=n len _ p=1n=1 result _ as _ list=[prime for prime in p[:len _ p]]返回结果_ as同理,setup.py文件内容为:

  从distutils.core导入设置从Cython .构建导入cytonize setup(ext _ modules=cytonize( primes。pyx ))在参考的环中给出了测试的案例,有些解释的不太好,我这边描述一下

  直接使用计算机编程语言实现版本,平均用时23msPython版本用解释器编译(对,直接把计算机编程语言文件名字像圣体容器一样放进去就好了), 平均用时11mspyx的解释器编译版本,平均用时1.6毫秒统计项目注意,这里不能直接使用统计,因为似乎是有这个库了呃

  stat_ .pyx:

  来自libc。math CIM port sqrtdef mean(list arr):cdef:int I int SZ double tmp tmp=0 SZ=len(arr)for I in range(SZ):tmp=arr[I]return tmp/SZ def STD(list arr):cdef:double m=mean(arr)int SZ,I double tmp SZ=len(arr)tmp=0 for I in range(SZ):tmp=(arr[I]-m)* * 2 return sqrt(tmp)setup。py:

  从distutils.core导入设置从Cython .构建导入cytonize setup(ext _ modules=cytonize( stat _ .pyx ))命令还是一样的:python设置。py build _ ext-在位

  测试:

  import stat_ a=[1,2,3] stat_ .平均值(a)2.0统计.STD(a)1。54686 .38686868661

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: