[python] modul turtle: rychlost graf.výstupu; chyba v setup?

petrofF petr0ff na seznam.cz
Úterý Květen 18 21:20:18 CEST 2010


Při jednoduchém testu, jak časově náročné je generování dlouhých
sekvencí pohybových příkazů (typických pro generování fraktálů, což je
oblast použití, která mě zajímá) jsem obdržel výsledky, které mě
(nemile) překvapily:

from turtle import *
import time

def stopky(label,funkce):
    Tstart=time.clock(); rtn = funkce()
    Tfinish=time.clock()
    print label % (Tfinish-Tstart)
    return rtn

def LF_repeat(pocet):
    for i in xrange(pocet):
        left(90)
        forward(8)
        
F = lambda x: lambda: LF_repeat(x)

for level in range(6):
    pocet = 256 << level
    reset(); speed("fastest"); tracer(0);
    stopky("Vykresleno:  %4s useku  za %%6.2f s" % pocet,F(pocet))


Vykresleno:   256 useku  za   0.27 s
Vykresleno:   512 useku  za   1.03 s
Vykresleno:  1024 useku  za   3.97 s
Vykresleno:  2048 useku  za  15.75 s
Vykresleno:  4096 useku  za  61.73 s
Vykresleno:  8192 useku  za 242.27 s

Jak vidno, při zdvojnásobení počtu příkazů se doba prodlouží
čtyřnásobně
Není mi jasné proč tomu tak je...

Pokud víte o nějaké py knihovně s rychlými primitivy (drawPoint,
drawLine) byl bych rád

Dále:
Připadá mi, že ve funkci setup je chyba:


def setup(**geometry):
    """ Sets the size and position of the main window.
    Examples:
    >>> setup (width=200, height=200, startx=0, starty=0)

    sets window to 200x200 pixels, in upper left of screen

    >>> setup(width=.75, height=0.5, startx=None, starty=None)

    sets window to 75% of screen by 50% of screen and centers

    >>> setup(width=None)

    forces use of default geometry as in older versions of turtle.py
    """

    global _width, _height, _startx, _starty

    width = geometry.get('width',_width)
    if width >= 0 or width == None:
        _width = width
    else:
        raise ValueError, "width can not be less than 0"

    height = geometry.get('height',_height)
    if height >= 0 or height == None:
        _height = height
    else:
        raise ValueError, "height can not be less than 0"

    startx = geometry.get('startx', _startx)
    if startx >= 0 or startx == None:
        _startx = _startx                        <<<=========== ??????
    else:
        raise ValueError, "startx can not be less than 0"

    starty = geometry.get('starty', _starty)
    if starty >= 0 or starty == None:
        _starty = starty
    else:
        raise ValueError, "startx can not be less than 0"

    ....atd

Je to z instalace Python 2.5




Další informace o konferenci Python