1

感谢stackoverflow上的一些人,我终于让cython工作了,但现在有一个问题。从我不使用 cdef 到使用 cdef 时,速度确实没有提高。不要误会我的意思,当我使用 cython 编译 python 代码时,速度有非常显着的提高,但当我使用 cdef 时则没有这么多。

这是减慢程序其余部分的代码区域:

def tupdate(self,surf):     

    cdef int x
    cdef int y

    for x in xrange(self.w):
        for y in xrange(self.h):
            if self.map[(x,y)].y <= 600 and self.map[(x,y)].y >= -50: self.map[(x,y)].FLAG = 1
            else: self.map[(x,y)].FLAG = 0
            self.map[(x,y)].y += self.speed
            if self.map[(x,y)].FLAG:
                self.map[(x,y)].rect = ((self.map[(x,y)].x,self.map[(x,y)].y),(50,25))
                self.map[(x,y)].update()
                self.map[(x,y)].render(surf)

这段代码应该每秒被调用 60 次,但是由于代码的速度和我的旧硬件,它每秒只被调用大约 30 次,我认为对于像 x 和 y 这样频繁使用的变量使用 cdef 会有所帮助。但是cdef前后的fps是一样的。

我在使用 32 位 python 2.7 的 Windows 7 64 位

4

1 回答 1

5

您在代码中索引self.map 11 次,索引相同。索引一次,将引用复制到本地名称中,然后使用该名称。

于 2012-07-31T05:24:50.150 回答