Cython基础--Cython的语句和表达式

Cython的语句和表达式

1 Cython的语句和表达式遵循的是Python的语法

2 但是由于Cython融合了C语言的语法,有些区别也要注意一下:

2.1 Cython里没有“->”操作符,用"."代替,这在上一节结构体的使用中己讲过

2.2 Cython里没有指针的取值操作符“*”,用p[0]代替*p

2.3 Cython里也有取一个变量的地址操作符&

2.4 在Cython里空指针用NULL表示,而且NULL是保留关键字,不能用0表示,除非用强制转换虽然大家知道NULL的值其实就是0

2.5 Cython里用<>来进行强制转换,而不像是C/C++里的(),如:

cdef int a

cdef int *b = &a

a = <int>b


3 关于Cython的for循环  

3.1 Cython里同样支持Python里的for-in-range形式的for循环

3.2 出于性能的考虑,Cython对for循环作了优化,如for i in range(n),如果i是一个预先通过cdef 定义的变量,那么Cython会将这样的for循环转成C代码,举个例子:

cdef int i

for i in range(0,10,2):

    printf("%d\n",i)

 

3.3 翻译后的C代码变成:

  for (__pyx_t_1 = 0; __pyx_t_1 <10; __pyx_t_1+=2) {

    __pyx_v_i = __pyx_t_1;

 

    /*"test.pyx":19

 *     cdef int i

 *     for i inrange(0,10,2):

 *        printf("%d\n",i)            # <<<<<<<<<<<<<<

 */

    printf(__pyx_k_1,__pyx_v_i);

  }

3.4 输出结果就是:

0

2

4

6

8

3.5 要注意的是,i必须是整型变量,并且range里的范围和步长也必须是整数,要不然会抛异常,如果要支持浮点数的循环,那只能用while语句了

3.6 同时出于兼容Pyrex的考虑,还保留了Pyrex的for语法,如:

    for i from 0<=i<=10:

       printf("%d \n",i)

 这就不多讲了

 



版权声明:本文为I2Cbus原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。