我编写了一个函数,以了解一个数字在Python中是否为素数(在本例中使用Python3.8.1)。见下面的is_prime_v1。然后,我想通过使用v2内置函数来尝试any,参见下面的is_prime_v2。我很想知道v1和v2之间的时间差,下面的代码在我的计算机上得到了以下输出:
v1: 5.224290132522583
v2: 7.654775142669678这让我很惊讶。我会认为,使用any将花费大约相同的时间,甚至更快。但是在这里它比较慢,一个猜测可能是由于函数调用any本身,但我不确定。也许有更深的Python知识的人可以解释为什么呢?
from time import time
from math import sqrt
def is_prime_v1(n):
if n < 3 or n % 2 == 0:
return n == 2
for i in range(3, int(sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
def is_prime_v2(n):
if n < 3 or n % 2 == 0:
return n == 2
return not any(n % i == 0 for i in range(3, int(sqrt(n)) + 1, 2))
if __name__ == '__main__':
RANGE_SIZE = 2000000
t = time()
for i in range(RANGE_SIZE):
is_prime_v1(i)
print('v1:', time() - t)
t = time()
for i in range(RANGE_SIZE):
is_prime_v2(i)
print('v2:', time() - t)发布于 2021-03-14 22:37:53
当使用解决方案2时,在解决方案1中有2个for循环而不是一个:
任意函数中的一个函数(它需要循环您要给它的值)
一个参数作为any函数的参数,它等价于您原来的for循环。
此外,正如@juanpa.arrivilaga所指出的,您正在创建一个生成器对象,creates additional overhead。
https://stackoverflow.com/questions/66630182
复制相似问题