zoukankan      html  css  js  c++  java
  • Cython: 快速入门

    1. Cython是什么?

         它是一个用来快速生成Python扩展模块(extention module)的工具,语法是Python和c的混血。在Cython,C里的类型,如int,float,long,char*等都会在必要的时候自动转成python对象,或者从python对象转成C类型,在转换失败时会抛出异常,这正是Cython最神奇的地方。另外,Cython对回调函数的支持也很好。Cython作为一个Python的编译器,在科学计算方面很流行,用于提高Python的速度,通过OpenMPI库还可以进行吧并行计算。

    2. 安装

      Cython安装非常方便,因为一般像Anaconda、Python(x,y)等都附带了,如果没有用这些,也可以自己安装。附上安装教程 http://docs.cython.org/src/quickstart/install.html

    3. 例子

    cdef extern from"stdio.h":
        extern int printf(const char *format, ...) 
    def SayHello():
        printf("hello,world
    ")

    代码非常简单,就是调用了C函数printf打印hello,world. 

    简单解释

    (1) cdef 定义类c的函数 

    (2) 可以引入c库中的模块以及其中的函数,并且被调用

    4 运行

    (1) 利用python的distutils

    上面的代码被命令为hello.pyx,在同级目录下创建一个setup.py

    from distutils.core import setup
    from Cython.Build import cythonize
    from distutils.extension import Extension
    
    setup(
      name = 'Hello world app',
      ext_modules = cythonize([
          Extension("hello",["hello.pyx"]),
          ]),
    )

    然后

    >>>python setup.py build

    >>>python setup.py install

    (2)  自己写Makefile

    写Makefile的好处就是可以知道编译的实质:

    下面是用于Windows下编译的Makefile,Makefile内容如下:

    ALL :helloworld.pyd

    helloworld.c : helloworld.pyx

         cython -o helloworld.c helloworld.pyx

    helloworld.obj :helloworld.c

         cl -c -Id:python27include helloworld.c

    helloworld.pyd :helloworld.obj

         link /DLL /LIBPATH:d:python27libshelloworld.obj /OUT:helloworld.pyd 

    执行命令:

    set PATH=D:Python27Scripts;%PATH%

    nmake

    进行编译,会在根目录下生成helloworld.pyd

    linux下的Makefile和Windows下的类似,只是编译器不同而己,另外,生成的文件名为:helloworld.so,而不是helloworld.pyd

     

  • 相关阅读:
    【SQL基础】三种类别语句
    【安装eclipse, 配置java环境教程】 编写第一个java程序
    【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)
    【经典算法大全】收集51种经典算法 初学者必备
    【费式搜寻法】
    【插补搜寻法】
    【基数排序(桶排序)】
    【字串核对】
    【老鼠走迷宫二】
    【稀疏矩阵】
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4984958.html
Copyright © 2011-2022 走看看