2017-11-08 7 views
0

현재 graphics.py 모듈을 사용하여 삶의 게임 버전을 개발 중입니다. 나는 프로그래밍에 익숙하지 않으므로 나와 함께 곰!인스턴스화 객체를보다 빠르게 설정하고 배열에 할당하는 방법

현재 대한 루프 I가 매우 빠르고 더 작은 격자를 생성 할 수있는 사용하고 중첩하지만 위쪽 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를 열/행의 양으로 나눈 값입니다. 지금까지는 별도의 모듈에서이 어레이를 미리 생성하고 가져 오는 것 (어쨌든 작은 크기, 중간 크기 등의 미리 설정된 크기 옵션 만 사용함) 또는 b) 어떻게 든 멀티 프로세싱을 사용하여 brute-force it. 이 배열을 절대적으로 가질 필요는 없지만, 내 코드의 제한이나 그래픽스 모듈의 제한이라면 무엇보다 호기심이 없습니까?

편집 : 또한 루프를 반복하면서 느려지는 것을 느꼈습니다. 어떻게 이런 일이 일어 났습니까?

답변

0

python2.x을 사용하는 경우 range 대신 xrange을 사용하십시오.

xrange

은 더 많은 메모리를 효율적이고보다 빠른 range

이유 : 당신이 range(1,100000)을 수행 할 때 그것을 사용하여 런타임에 번호를 생성합니다 xrange(1,100000)으로 메모리에 생성됩니다 100000 요소의 배열을 반환합니다 함수에 제공된 현재 값과 단계 값.

+0

* in Python 2 ... – DavidG

+0

예, 업데이트 예정입니다. – Anuj

+0

Python 2.x 있음. 그러나 Python 3.x에서'xrange()'는'range()'로 이름이 바뀌 었습니다. –