看一下cython 代码的简单示例,我想知道 CPython 解释器是否需要一些硬编码的技巧来理解 cython 语法(例如cdef int N
),或者它是否使用标准 python 语法的一些概念(例如函数、类、运算符等)来实现
我的意思是,我可以大致想象如何实现 cython 后端(c 代码生成、编译等),但我不明白如何在不接触 python 解释器本身的情况下将前端语法集成到标准 python 解释器中(即无需将 python 语言扩展到标准之外)。
是什么cdef
?
换句话说,究竟cdef
是什么?它是函数、运算符还是一些新关键字?我会理解N = cedef(int)
- 这将创建一些派生自int
. 但是这样写,我看不出这 3 个令牌是如何交互的 (1 cdef
, 2 int
, 3 N
) ?
-loop实际上是否for
迭代?
如果你写这样的代码:
cdef int i,N = 1000000
cdef double f = 0
for i in xrange(N):
f += (i*i)
print f
该循环for i in xrange(N):
是普通的python循环。是什么阻止了 python 解释器在 cython 将其编译为 C 代码之前无用地迭代 1000000 次迭代?
它是否像这样工作:
N
是 some 的一个实例class cdef
。xrange
调用N.__int__()
返回1
,只传递一次循环。该表达式f += (i*i)
仅包含cdef
对象,因此 cython 可以重新定义__add_()
, __set__()
,__get__()
函数以生成 C 代码f+=(i*i)
但是我仍然看不到构造for i in xrange()
是如何发送到 cython 的,以从中生成 C 代码。
无论如何,它似乎相当复杂和脆弱,所以也许它必须是其他的