Python any () + выражение генератора

Согласно сообщению в блогеВотВыражение генератора any () + должно выполняться быстрее, чем цикл for, и кажется, что его рассуждения имеют смысл.

Но я пытался использовать этот метод (хотя и для какой-то другой функции), но, похоже, он занимает больше времени, чем явный цикл for.

def with_loop(a, b):
    for x in xrange(1, b):
        if x * a % b == 1: return True
    return False

def with_generator(a, b):
    return any(x * a % b == 1 for x in xrange(1, b))

В основном код перебирает все числа от 1 доb найти ли номерa имеет модульную инверсию.

Время, которое я получил от запуска функций:

>>> from timeit import Timer as T
>>> T(lambda : with_generator(100, 300)).repeat(number = 100000)
[3.4041796334919923, 3.6303230626526215, 3.6714475531563266]
>>> T(lambda : with_loop(100, 300)).repeat(number = 100000)
[2.1977450660490376, 2.2083902291327604, 2.1905292602997406]
>>> T(lambda : with_generator(101, 300)).repeat(number = 100000)
[1.213779524696747, 1.2228346702509043, 1.2216941170634072]
>>> T(lambda : with_loop(101, 300)).repeat(number = 100000)
[0.7431202233722161, 0.7444361146951906, 0.7525384471628058]

with_generator (100,300) возвращает значение False, а with_generator (101,300) возвращает значение True.

Кажется, что with_generator всегда занимает больше времени, чем with_loop. Есть ли причина для этого?

РЕДАКТИРОВАТЬ: Есть ли другой более короткий или более элегантный способ переписать with_loop, чтобы мы достигли аналогичной или лучшей производительности? Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос