python - Python 内置函数,例如 any
问题描述
我写了一个函数来知道一个数字在 Python 中是否是素数(在这种情况下使用 Python 3.8.1)。见is_prime_v1
下文。然后我想通过使用any
内置函数来尝试 v2,见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)
解决方案
使用解决方案 2 时,您有 2 个 for 循环,而不是解决方案 1 中的一个:
any 函数中的一个(它需要遍历你给它的值)
一个作为函数的参数any
,相当于你原来的 for 循环。
此外,正如@juanpa.arrivilaga 指出的那样,您正在创建一个生成器对象,这会产生额外的开销。
推荐阅读
- java - Spring Boot 自动生成带有属性的关联表
- api - 如何组织不同类型用户使用的微服务端点?
- ios - 水平 ScrollView (SwiftUI) 中的动画展开/折叠组
- python-3.x - PowerSchool Python API 插件
- c# - 是否可以将 Rx“使用”运算符与 IAsyncDisposable 一起使用?
- php - 用户'root'@'localhost'的访问被拒绝(使用密码:YES)
- c# - Unity3D如何使对象开始使用半径在弧或圆中移动?
- c# - 如何使用 Accord.net 通过字符串动态实例化新的 NonlinearObjectiveFunction
- python - 合并数据框 Pandas 时出现重复行
- flutter - 是否可以在颤振依赖项中使用远程路径而不使用本地路径 repo