更快地设置实例化对象并将其分配给数组

时间:2017-11-08 13:13:24

标签: python loops for-loop graphics multiprocessing

我目前正在使用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模块的限制,那么它更多是出于好奇吗?

编辑: 我也注意到,当它遍历循环时,它会进一步减慢速度!怎么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

如果您使用python2.x使用xrange代替range

xrange的内存效率更高,速度更快range

<强>原因: 执行range(1,100000)时,它将返回一个在内存中创建的100000元素数组,其中xrange(1,100000)将在运行时使用当前值和提供给它的步长值生成数字。功能