在回答Clunky 计算出的一组增量数字之间的差异,是否比较好? 我提出了两个解决办法,一个是List Comprehension
,另一个是itertools.starmap/a>。
对我来说,<代码> 清单理解x 认为更清晰、更可读、少易懂、更富足。 但仍然作为starmap。 我很想知道的是,它完全可以采用惯用器,因此必须有这样做的理由。
我的问题是:starmap
。 可在<条码>上选取。
<><>>>>> 如果是这样的话,这无疑与<编码>相矛盾。 最好只采用一种方式——。
<>Head to Head Comparative
Its again a matter of perception but to me LC
is more readable than starmap
.
To use starmap
, either you need to import operator
, or define lambda
or some explicit multi-variable
function and nevertheless extra import from itertools
.
>>> def using_star_map(nums):
delta=starmap(sub,izip(nums[1:],nums))
return sum(delta)/float(len(nums)-1)
>>> def using_LC(nums):
delta=(x-y for x,y in izip(nums[1:],nums))
return sum(delta)/float(len(nums)-1)
>>> nums=[random.randint(1,10) for _ in range(100000)]
>>> t1=Timer(stmt= using_star_map(nums) ,setup= from __main__ import nums,using_star_map;from itertools import starmap,izip )
>>> t2=Timer(stmt= using_LC(nums) ,setup= from __main__ import nums,using_LC;from itertools import izip )
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=1000)/100000)
235.03 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=1000)/100000)
181.87 usec/pass