日记大全

日记大全 > 句子大全

如何使用C语言优化Python代码

句子大全 2007-10-09 18:17:44
相关推荐

Cython通常用于创建加速Python代码执行的C模块。在解释语言效率不高的复杂应用程序中,这一点很重要。

安装Cython

可以使用Python在Linux、BSD、Windows或macOS上安装Cython:

$python-mpipinstallCython

将Python转换为C

从Cython开始的一个好方法是使用一个简单的“Hello World ”应用程序。这不是优势的最好证明,但它显示了你使用时会发生什么。

首先,在一个名为hello.pyx的文件中创建这个简单的Python脚本(.pyx扩展名并不神奇,从技术上讲,它可以是任何东西,但它是Cython的默认扩展名):

print("hello world")

接下来,创建一个Python安装脚本。 setup.py文件类似于Makefile的Python版本,Cython可以使用它来处理Python代码:

fromsetuptools import setupfrom Cython.Buildimport cythonizesetup( ext_modules = cythonize("hello.pyx"))

最后,使用Cython将Python脚本转换为C代码:

$python setup.py build_ext--inplace

要使用Python“Hello World”脚本的C代码版本,请打开Python提示并导入创建的新模块:

>>>importhellohello world

将C代码集成到Python中

计算能力的一个很好的通用测试是计算素数。素数是大于1的正数,只有在除以1或本身时才产生正整数。理论上很简单,但随着数字变大,计算要求也增加了。在纯Python中,它可以在10行代码下完成:

importsysnumber =int(sys.argv[1])ifnotnumber <=1:for i inrange(2, number):if(number % i)==0:print("Not prime")breakelse:print("Integer must be greater than 1")

此脚本在成功后将保持不变,如果数字不是素数,则返回一条消息:

$ ./prime.py 3$ ./prime.py 4Not prime.

将其转换为Cython需要进行一些工作,一方面使代码适合用作库,另一方面使性能提高。

脚本和库

许多用户将Python作为一种脚本语言进行学习:把将要执行的步骤告诉Python,然后它就可以完成工作。 当了解更多有关Python(以及一般来说是开放源代码编程)的知识时,会发现许多最强大的代码包含在其他应用程序可以利用的库中。 代码越不具体,程序员将其重新用于其他应用程序的可能性就越大。

对于这个简单的质数计算器,将其转换为Cython的过程是通过设置脚本开始的:

fromsetuptools import setupfrom Cython.Buildimport cythonizesetup( ext_modules = cythonize("prime.py"))

将脚本转换为C:

$python setup.py build_ext --inplace

到目前为止,一切似乎都运行良好,但是当尝试导入和使用新模块时,会出现错误:

>>>importprimeTraceback (most recent call last): File "<stdin>", line 1,in<module> File "prime.py", line 2,in init prime number =sys.argv[1]IndexError: list index out of range

问题在于,Python脚本希望从终端运行,在终端上,参数(在这种情况下,是要测试为质数的整数)很常见。 需要修改脚本,以便可以将其用作库。

编写一个库

库不使用系统参数,而是接受其他代码的参数。 不用使用sys.argv来引入用户输入,而是使代码成为一个接受称为number(或num或喜欢的任何变量名)的参数的函数:

defcalculate(number):ifnot number <=1:for i inrange(2, number):if(number % i)==0:print("Not prime")breakelse:print("Integer must be greater than 1")

这使脚本难以测试,因为当在Python中运行代码时,永远不会执行calculate函数。 但是,Python程序员针对此问题设计了一种通用的解决方法,即使不是直观的方法。 当Python解释器执行Python脚本时,有一个名为__name__的特殊变量被设置为__main__,但是当它作为模块导入时,__name__被设置为模块的名称。 通过利用这一点,您可以编写一个既是Python模块又是有效的Python脚本的库:

importsysdefcalculate(number):ifnot number <=1:for i inrange(2, number):if(number % i)==0:print("Not prime")breakelse:print("Integer must be greater than 1")if __name__ =="__main__": number =sys.argv[1] calculate(int(number))

现在,可以将代码作为命令运行:

$ python ./prime.py 4Not a prime

可以将其转换为Cython以用作模块:

>>>importprime>>> prime.calculate(4)Not prime

C语言Python

使用Cython将代码从纯Python转换为C可能会很有用。 但是还有Cython功能可帮助用户在转换前优化代码,还可以选择分析代码以查找Cython与C交互的时间,等等。 如果使用的是Python,希望通过C代码增强代码,或者进一步了解库如何提供比脚本更好的可扩展性,或者只是对Python和C如何协同工作感到好奇,那么请开始使用Cython。

好了,本文到此结束。如果对编程、计算机、程序员方面感兴趣的话,欢迎私信联系我,随时交流!点个关注,是对我莫大的鼓励!

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新