是的与生成器表达式一起使用all:
def primecheck_all(x):
return all(prime(n) for n in x)
这与执行以下操作大致相同:
def primecheck_longway(x):
for n in x:
if not prime(n):
return False
return True
进行一些计时,尽管primecheck_all更容易阅读,但它似乎实际上更快. primecheck_xrange(您的版本)最慢:
>>> def prime(n):
#simple function so all timing goes to how the list check is done
return n % 2 == 0
>>> l = range(100)
>>> timeit.timeit(lambda: primecheck_all(l))
1.4247075990295475
>>> timeit.timeit(lambda: primecheck_longway(l))
0.6282418298159413
>>> timeit.timeit(lambda: primecheck_xrange(l))
1.161489160644436
>>> l = range(2,100,2)
>>> timeit.timeit(lambda: primecheck_all(l))
10.058764784981875
>>> timeit.timeit(lambda: primecheck_longway(l))
7.728265179204939
>>> timeit.timeit(lambda: primecheck_xrange(l))
10.481824344034152
这可能是由于不必具有发电机的开销.可以看出,这是一百万次迭代的2.3秒差异.