ubuntu 下安装: sudo apt-get install pyrex
windows 下安装: 从其官方网站http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex下载Pyrex的ZIP文件。将其解压后,进入其目录,运行如下所示命令将安装Pyrex。
python setup.py install
它将 pyrexc.py放在 c:\python25\Scripts\目录下。
首先编写如下所示“test.pyx”文件。
def test(): return 'A test file!'
windows下转换test.pyx成C, 运行如下所示的命令:
c:\python25\python.exe c:\python25\Scripts\pyrexc.py test.pyx
运行完命令后将在目录中生成“test.c”.
在VC++ 中将“test.c”编译或链接。
Pyrex文件语法
Pyrex文件完全使用了Python的语法。在编写Pyrex文件时,只需按照Python的语法编写即可。在Pyrex中可以定义C语言中的结构体、枚举等类型,也可以使用C语言中的数据类型。
1.数据类型
Pyrex定义了与C语言中相对应的数据类型,使用“cdef”可以在Pyrex中使用C语言中的数据类型。代码如下所示。
cdef char *s # 相当于C中的字符串
cdef int x,y # 相当于C中的int型
cdef int z[4] # 相当于C中的数组
cdef float f # 相当于C中的浮点型
cdef int *p # 相当于C中的指针
2.结构体、联合及枚举
除了定义C中的数据类型以外,还可以使用“cdef”定义C中的结构体、联合、枚举等。代码如下所示。
cdef struct Human: # 定义结构体
char *name
char *sex
int age
cdef union Fruit: # 定义联合体
char *apple
char *banana
char *orange
cdef enum: #定义枚举
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
3.函数
使用“cdef”可以像使用Python中的 “def”一样来定义一个函数。在Pyrex文件中既可以使用“def”来定义函数,也可以使用“cdef”来定义函数。不同的是,使用“def”定义的 函数,只能使用Python的数据类型,而使用“cdef”定义的函数则可以使用C中的数据类型。另外,使用“def”定义的函数可以被模块导出,在 Python中使用。而使用“cdef”定义的函数则不能被Python使用。代码如下所示。
cdef int sum(int x, int y): # 使用C数据类型定义函数
return x + y
cdef sum(x, y): # 如果没有声明参数类型,则表示为Python中的类型
return x + y
cdef object sum(object x, object y): # 使用object显式地表示参数为Python中的类型
return x + y
4.使用类
使用“cdef”也可以在Pyrex文件中定义类。需要注意的是如果通过继承创建类,则父类应该在该Pyrex文件中定义,否则应该使用“extern”表示父类在外部定义。代码如下所示。
cdef class Stud: # 使用cdef定义类
def setname(self,n): # 定义setname方法
self.name = n
def showname(self): # 定义showname方法
print self.name
cdef class Student(Stud): # 通过继承创建类
def setnum(self,n): # 定义setnum方法
self.num = n
def shownum(self): # 定义shownum方法
print self.num
5.使用include和外部C函数
Pyrex支持类似于C语言头文件的“.pxi”文 件。使用“.pxi”可以将较大的Pyrex文件分成多个文件,这样便于维护。“.pxi”文件像C语言中的头文件一样,只要使用“include”包含 就可以了。除此以外,在Pyrex中也可以使用C语言头文件中声明的函数原型。例如使用Python/C API中的 PyRun_SimpleString函数,则可以使用如下写法。
cdef extern from "Python.h":
int PyRun_SimpleString(char *command)
没有评论:
发表评论