python cython 模块(2)

cython 的主要用途是加速python 代码的执行速度,手段有很多种,最简单的一种就是将变量声明成静态类型:

比如用python 代码写的计算素数的函数,最大计算1000个:

def primes(kmax):
    p  = range(1000)
    res = []
    if kmax > 1000:
           kmax = 1000
    k, n = 0, 2
    while k < kmax:
           i = 0
           while i < k and n % p[i] != 0:
            i += 1
           if i == k:
            p[k] = n
            k += 1
            res.append(n)
           n += 1
    return res

用cython 写的计算素数的函数:

def primes(int kmax):
    cdef int p[1000]
    cdef int k = 0
    cdef int n = 2
    cdef int i = 0
    res = []
    if kmax > 1000:
           kmax = 1000
    while k < kmax:
           i = 0
           while i < k and n % p[i] != 0:
            i += 1
           if i == k:
            p[k] = n
            k += 1
            res.append(n)
           n += 1
    return res

这两个函数实现了相同的功能, 不同的是cython 中将一些变量声明成了静态类型,

现在比较这两个函数的运行速度,先计算python 函数的 运行时间 test.py:

import time
import primes

start = time.time()
a     = primes.primes(1000)
end   = time.time()
print "{}".format(end - start)

运行python test.py , 结果为 0.251568078995

在计算cython 函数的运行时间 test_cython.py:

import time
import cython_primes as primes

start = time.time()
a     = primes.primes(1000)
end   = time.time()
print "{}".format(end - start)

运行python test_cython.py , 结果为 0.0071849822998

可以看出速度快了30多倍, 只是声明静态变量就提高了许多。

原文地址:https://www.cnblogs.com/xudongliang/p/5048292.html