当有很多方法可以做某事时,我会根据可读性或速度等标准来决定使用哪种代码。这里有一些代码表明use_loop和{}在速度方面大致相同(至少对于测试的值!)在import operator
import itertools
a=range(1,1000)
def use_loop(a,n):
result=1
for num in a[:n]:
result*=num
return result
def use_reduce(a,n):
return reduce(operator.mul, a[:n])
def use_reduce_lambda(a,n):
return reduce(lambda x,y: x*y, a[:n])
def use_islice_loop(a,n):
result=1
for num in itertools.islice(a,n):
result*=num
return result
def use_islice_reduce(a,n):
return reduce(operator.mul, itertools.islice(a,n))
if __name__=='__main__':
n=50
print(use_loop(a,n))
print(use_reduce(a,n))
print(use_reduce_lambda(a,n))
print(use_islice_loop(a,n))
print(use_islice_reduce(a,n))
以下是计时结果:
^{pr2}$
至少对于测试的a(1000)和n(50)的值,itertools.islice似乎对性能没有帮助。use_reduce_lambda明显慢于它的表亲use_reduce,后者使用operator.mul。但是,导入operator所需的时间没有包括在测试中。在
由于use_loop和{}看起来速度一样快,我建议使用reduce,因为它的简短、惯用的代码对于大多数python程序员来说应该是相当可读的。然而,在品味方面,我认为过于固执己见是不值得的。选择你最喜欢的,只是要始终如一。在
{14}不能再通过cdps}来访问{14},但不能再通过cdps}来访问。在