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多倍, 只是声明静态变量就提高了许多。