Cython使用案例之:输出Hello World

  • Cython

    Cython是包含C数据类型的Python

    Cython研究资料汇总

    1. python是脚本语言;
    2. cpython是用c来实现的python的解释器;
    3. cython是另外一种编程语言,介于pythonc之间;

    实际上cython的设计初衷也是这样,既要利用python快捷的编程速度,又要有c语言的运行效率。cythonpython的一个显著区别就是,cython的所有变量都要明确声明变量类型——仅仅这一点,相同的程序,cython的运行效率就要比python的高35%!

    虽然cython是一种独立的编程语言,不过貌似大家不用他独立的编写程序,而是用它来编写pythonc扩展用c高效实现某些程序,再给python调用

  • Cython输出Hello World

    1. 创建test.py

      文件中内容如下:

      def say_hello():
          print("Hello World")
      

      此环节官方文档中使用的是test.pyx文件,内容一样。

      .pyx 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块源代码文件。

      pyx文件是pythonc扩展文件,代码要符合cython的规范,用什么编辑器写都行。

    2. 创建setup.py

      上面的.pypyx文件还仅仅是源代码文件,要想被python调用、要想运行,仅仅写了源代码还是不够的。具体来说,还要转成.c或者.c++的文件,并且再进一步转成.pyd文件。pyd文件才是可以直接使用的文件。为了达到上述目的,就要写一个setup.py脚本,如下:

      from distutils.core import setup
      from Cython.Build import cythonize
      
      setup(
          ext_modules = cythonize("test.py")
      )
      
    3. 构建Cython文件

      通过命令行,进入文件所在路径,运行下述代码:

      python setup.py build_ext --inplace
      

      build_ext是指明python生成C/C++的扩展模块(build C/C++ extensions (compile/link to build directory));
      --inplace表示 将编译后的扩展模块直接放在与test.py同级的目录中

      生成一个helloworld.pyd文件,运行中可能出现两个错误:

    4. 在Python中运行

      Python界面或CMD >> python,导入新建的文件

      import test as ts
      ts.say_hello()
      

      其中,cmd要先转到test所在目录,上述代码才能成功。

      在这里插入图片描述

  • 解释

    上述过程分为两部分:

    1. .py文件使用Cython被编译为.c文件;
    2. .c文件使用C编译器生成.pyd(windos)或.so(linux)文件

    不像 Python 语言可直接解释使用的 .py 文件,.py(或.pyx) 文件必须先被编译成 .c 文件,再编译成 .pyd (Windows 平台) 或 .so (Linux 平台) 文件,才可作为模块 import 导入使用。

    .c文件是test.py转化后的C代码文件,比较大;

    .pydPython动态链接库,在使用import时会加载;

    .pyc是字节码,二进制,就是Python虚拟机直接运行的代码;

    build目录中包含编译过程中生成的临时文件。

    .pyx文件pythonc扩展文件,代码要符合cython的规范,用什么编辑器写都行。

## References
  1. Cython的用法以及填坑姿势 重点参考资料
  2. 官方文档 : Cython 的基础
  3. (2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat
  4. (2019.12.17已解决)Cython编译ImportError:No module named Cython.Build
  5. Cython - 基于 Pyrex 编写 Python 的 C 语言扩展模块的静态编译器
  6. pyx文件 生成pyd 文件用于 cython调用
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值