2014-08-28 119 views
1

我發現python的龜實現速度非常慢。我預計會有一些延遲,但不會等待一個相對簡單的分形(Koch曲線有5次迭代)。Python 3.x龜非常慢?

即使在設置turtle.speed(0)之後,它仍然很慢。也許有一個錯誤,因爲它不像文檔中聲稱的那樣是即時的?

這個answer建議通過隱藏一個窗口來重新實現海龜。類似question沒有得到答案。我是否錯過了某些東西,或者正在重新實施該走的路?

這裏是我的精簡代碼(創建L系統的幾乎是瞬間):

import turtle 

def l_system(V, w, P, n): 
    current = w 

    for i in range(n): 
     current = [P[x] if x in P else x for x in list(current)] 
     current = ''.join(current) 

    return current 

def run_turtle(var, start, rules, iters, angle, size, scale): 
    terry = turtle.Turtle() 
    terry.pensize(1) 
    terry.pencolor("blue") 
    terry.speed(0) 

    dist = size/((iters + 1) ** scale) 
    positions = [] 
    angles = [] 

    instructions = l_system(var, start, rules, iters) 

    for instr in instructions: 
     if instr in ('F', 'G'): 
      terry.forward(dist) 

     elif instr in ('M', 'N'): 
      terry.penup() 
      terry.forward(dist) 
      terry.pendown() 

     elif instr == '[': 
      positions.append(terry.pos()) 
      angles.append(terry.heading()) 

     elif instr == ']': 
      terry.goto(positions.pop()) 
      terry.setheading(angles.pop()) 

     elif instr == '+': 
      terry.left(angle) 

     elif instr == '-': 
      terry.right(angle) 

    turtle.mainloop() 

def right_koch(): 
    run_turtle(('F',), 'F', {'F':'F+F-F-F+F'}, 5, 90, 500, 3) 

right_koch() 
+0

你的問題沒有我們需要的信息來告訴你爲什麼你的程序很慢,所以沒有太多的事情可以幫助你。 – user2357112 2014-08-28 06:20:02

+0

@ user2357112我沒有問任何特定的程序,只是蟒蛇的龜一般繪製任何東西。 – qwr 2014-08-28 06:21:10

+1

你期待我們說什麼? 「是的,」烏龜很慢「或」不,「烏龜不慢」?我們無法分辨您可能會或可能不會丟失什麼,因爲我們無法分辨您所做的事情。 – user2357112 2014-08-28 06:22:42

回答

5

關閉繪圖延遲:

turtle.delay(0) 

和隱藏烏龜:

terry.ht() 

關閉繪圖延遲是一個很大的問題。如果你不這樣做,每當烏龜移動時停頓10毫秒。


如果你希望它去的更快,而你只關心最終的圖片,你可以完全關閉屏幕更新:

turtle.tracer(0, 0) 

,並呼籲update單一的時候,你的龜有執行所有指令:

terry.update() 

隨着跟蹤功能和手動update調用,程序完成近瞬間我的機器上。

+0

我知道我錯過了一些明顯的東西。 – qwr 2014-08-29 00:11:28