IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Cython使用及pycharm -> 正文阅读

[Python知识库]Cython使用及pycharm

文件总览

.
+-- main.py
+-- fib
|   +-- __init__.py
|   +-- cfib.c
|   +-- cfib.h
|   +-- fib.pyx
|   +-- setup.py

说明:

  1. main.py主程序
  2. __init__.py是模块引用文件
  3. cfib.c用c写的fib函数
  4. cfib.h是cfib的头文件,供fib.pyx参照
  5. fib.pyx是Cython文件
  6. setup.py是用来编译Cython的

代码

cfib.c

#include "cfib.h"

unsigned long fib(unsigned long n) {
    unsigned long a=0, b=1, i, tmp;
    for (i=0;i<n;++i) {
        tmp = a; a = a + b; b = tmp;
    }
    return a;
}

cfib.h

#ifndef __CFIB_H__
#define __CFIB_H__

unsigned long fib(unsigned long n);

#endif

cfib.ccfib.h就是标准的c程序写法,就不赘述,主要拿来比performance的

fix.pyx:定义引用的c函数

cdef extern from "cfib.h":
    unsigned long _fib "fib"(unsigned long n)

def fib_c(n):
    '''Returns the nth Fibonacci number.'''
    return _fib(n)

def fib_cython(n):
    '''Returns the nth Fibonacci number.'''
    a, b = 0, 1
    for i in range(n):
        a, b = a + b, a
    return a

def fib_cython_optimized(unsigned long n):
    '''Returns the nth Fibonacci number.'''
    cdef unsigned long a=0, b=1, i
    for i in range(n):
        a, b = a + b, a
    return a

__init__.py

from .fib import *

setup.py

from distutils.core import setup, Extension
from Cython.Build import cythonize

setup(ext_modules = cythonize(Extension(name="fib", sources=["cfib.c", "fib.pyx"])))

Pycharm

打开PyCharm,到settings => Tools => External Tools,然後点+,新增一个工具,设置如下:
pycharm_cython

Porgram$ModuleSdkPath$即python可执行文件路径
Arguments$FilePath$ build_ext --inplace
Working directory$FileDir$

这样基本上就大功告成了,然后回到Project对setup.py点右键,选External Tools,选CythonBuild就可以看到开始跑了
pycharm_cython_2
如果设置对的话,就可以看到编译成功的信息
pycharm_cython_3
当然为了避免每次编译pyx文件的时候都点击的话,可以直接设置该tool的快捷键。

最后就可以来跑跑看啦,main.py如下:

def fib_python(n):
    '''Returns the nth Fibonacci number.'''
    a, b = 0, 1
    for i in range(n):
        a, b = a + b, a
    return a

if __name__ == '__main__':
    print("##### check result #####")
    import fib
    print("fib(47) in python:", fib_python(47))
    print("fib.fib_c(47):", fib.fib_c(47))
    print("fib.fib_cython(47):", fib.fib_cython(47))
    print("fib.fib_cython_optimized(47):", fib.fib_cython_optimized(47))

    print("\n##### performace benchmark #####")
    import timeit
    python_setup = "from __main__ import fib_python"
    cython_setup = "import fib"
    print("Python code: ", timeit.timeit('fib_python(47)', setup=python_setup), "seconds")
    print("Cython code: ", timeit.timeit('fib.fib_cython(47)', setup=cython_setup), "seconds")
    print("Optimized Cython code: ", timeit.timeit('fib.fib_cython_optimized(47)', setup=cython_setup), "seconds")
    print("C code: ", timeit.timeit('fib.fib_c(47)', setup=cython_setup), "seconds")

输出结果:

C:\Users\*****\Miniconda3\envs\idp\python.exe D:/Dropbox/Data/programming/Python/Cython/1_fib/main.py
##### check result #####
fib(47) in python: 2971215073
fib.fib_c(47): 2971215073
fib.fib_cython(47): 2971215073
fib.fib_cython_optimized(47): 2971215073

##### performace benchmark #####
Python code:  2.9352622053858113 seconds
Cython code:  1.7331176511158422 seconds
Optimized Cython code:  0.14643933094340067 seconds
C code:  0.11884286952119272 seconds

Process finished with exit code 0

参考

Pycharm and Cython

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:32:46  更:2022-03-22 20:33:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:38:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码