我目前正在使用graphics.py模块开发一个生活游戏版本。我是编程新手,所以请耐心等待我!
目前我正在使用的嵌套for循环可以相当快地生成更小的网格,但它在50x50及以上时间明显变慢:
for i in range(self.scale, Interface.worldsize_max+2, self.scale):
for u in range(self.scale, Interface.worldsize_max+2,self.scale):
self.point1 = graphics.Point(i,u)
self.point2 = graphics.Point(i-self.scale, u-self.scale)
self.square = graphics.Rectangle(self.point1, self.point2)
self.square.draw(self.window)
self.square.setFill('black')
self.grid[round(i/(Interface.worldsize_max/self.worldsize))-1][round(u/(Interface.worldsize_max/self.worldsize))-1]=self.square
worldsize_max是程序运行窗口的宽度/高度的最大像素.scale是worldsize_max除以列/行的数量。到目前为止,除了a)在单独的模块中预先生成这些数组并导入它们(我只有预设大小选项,无论如何小,中等)或b)使用时,我无法想到一种更快速的方法。以某种方式多处理以强制它。将数组放大是绝对必要的,但如果它是我的代码的限制或者它可能是graphics.py模块的限制,那么它更多是出于好奇吗?
编辑: 我也注意到,当它遍历循环时,它会进一步减慢速度!怎么会发生这种情况?
答案 0 :(得分:0)
如果您使用python2.x
使用xrange
代替range
。
xrange
的内存效率更高,速度更快range
<强>原因强>:
执行range(1,100000)
时,它将返回一个在内存中创建的100000
元素数组,其中xrange(1,100000)
将在运行时使用当前值和提供给它的步长值生成数字。功能