0

看一下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 cdefxrange调用N.__int__()返回1,只传递一次循环。该表达式f += (i*i)仅包含cdef对象,因此 cython 可以重新定义__add_(), __set__(),__get__()函数以生成 C 代码f+=(i*i)

但是我仍然看不到构造for i in xrange()是如何发送到 cython 的,以从中生成 C 代码。

无论如何,它似乎相当复杂和脆弱,所以也许它必须是其他的

4

0 回答 0