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)
这就不多讲了