[Python] why is python generator slower than range and itertool repeat?

Discussão em 'Python' iniciado por Stack, Março 18, 2025.

  1. Stack

    Stack Membro Participativo

    I stormed up a Youtube short which introduced me to repeat from the itertools. I then decided to compare it to range and repeat but it seem very slow. What could be the reason?

    Below is my code

    from itertools import repeat
    from timeit import timeit

    def range_generator(start, stop, step=1):
    while start <= stop:
    yield start
    start += step

    def for_range():
    for _ in range(999_999_999): ...

    def for_repeat():
    for _ in repeat(None, 999_999_999): ...

    def for_range_gen():
    for _ in range_generator(1, 999_999_999): ...

    range_time = timeit(for_range, number=1)
    repeat_time = timeit(for_repeat, number=1)
    for_range_gen_time = timeit(for_range_gen, number=1)

    print(f"{range_time:.3f}s")
    print(f"{repeat_time:.3f}s")
    print(f"{for_range_gen_time:.3f}s")


    I tried comparing and timing them all and it turned out my custom generator is way too slow compared to range and repeat. Running the script 3 different times, i got;

    28.492s
    17.067s
    121.059s
    --------
    32.078s
    16.321s
    148.467s
    ---------
    29.349s
    18.025s
    126.159s


    ChatGPT seem to let me know range and repeat are both implemented in C that's why it much faster than my custom generator. How true is this please?

    I expect my custom generator should finish way faster than other functions range_time and repeat_time.

    Continue reading...

Compartilhe esta Página