zoukankan      html  css  js  c++  java
  • 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多倍, 只是声明静态变量就提高了许多。

  • 相关阅读:
    selenium2截图ScreenShot的使用
    selenium2断言类Assert的使用
    selenium2中的TestNg注解和数据驱动的简介及使用
    bash函数定义/使用/传参…
    bash字符串操作
    bash数组操作-定义/初始化/赋值…
    bash实例-参数/函数/统计IP
    01.AutoMapper 之约定(Conventions)
    00.AutoMapper 之入门指南(Getting Started Guide)
    AutoMapper
  • 原文地址:https://www.cnblogs.com/xudongliang/p/5048292.html
Copyright © 2011-2022 走看看