Нужно ускорить что-либо

Представим что есть такой скрипт

for number in range(100000):
    print(number)

И мне нужно ускорить работу этого скрипта любым способом


Ответы (2 шт):

Автор решения: MaxU

Если вам на самом деле нужно ускорить именно этот код

for number in range(100000):
    print(number)

то Python и его модули врядли здесь вам смогут помочь, т.к. печать на экран занимает для 100 строк 99.89% времени:

In [72]: %%timeit
    ...: for number in range(100):
    ...:     print(number)
...
1.02 ms ± 467 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

теперь тот же цикл, но без печати на экран:

In [73]: %%timeit
    ...: for number in range(100):
    ...:     # print(number)
    ...:     pass
    ...:
1.1 µs ± 28.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

PS если мне не изменяет память Numba не поддерживает функцию print() ;)


Если хотите заняться микро-оптимизацией - можно использовать list comprehension вместо обычного цикла:

_ = [print(i) for i in range(100000)]
→ Ссылка
Автор решения: Stanislav Volodarskiy

Эта функция на моём компьютере исполняется 0.015 с. Стандартный вывод перенаправлен в /dev/null:

def pr_3():
    print('\n'.join(map(str, range(100000))))

Оригинальная функция тратит 0.042 с:

def pr():
    for number in range(100000):
        print(number)

Я пробовал всевозможные вариации с numpy, быстрее ничего не нашел.

Забыл baseline, работает 0.000035 с:

def pr_4():
    print('''0
1
...
99998
99999''')
→ Ссылка