Expressão Python any () + generator

De acordo com o post do blogaqui, uma expressão de gerador any () + deve ser executada mais rapidamente que um loop for, e parece que o raciocínio dele faz sentido.

Mas eu tentei usar esse método (embora em alguma outra função), mas parece levar mais tempo para ser executado do que um loop for explícito.

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))

Basicamente, o código percorre todos os números de 1 ab para descobrir se o númeroa tem um inverso modular.

Os horários em que eu executei as funções são:

>>> 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) retorna False e with_generator (101.300) retorna True.

Parece que with_generator sempre leva mais tempo para ser executado do que with_loop. Existe alguma razão para isso?

Edição: Existe alguma outra maneira mais curta ou mais elegante de reescrever with_loop para que possamos alcançar um desempenho semelhante ou melhor? Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion