我正在使用cProfile检查过滤器的性能,
cProfile.run("""
s = [range(10000) for i in range(10000)]
filter(None, map(lambda x:x[0], s))""")
20005 function calls in 42.272 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 2.467 2.467 42.272 42.272 <string>:2(<module>)
10000 0.004 0.000 0.004 0.000 <string>:3(<lambda>)
1 0.000 0.000 0.000 0.000 {filter}
1 0.201 0.201 0.205 0.205 {map}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
10001 39.599 0.004 39.599 0.004 {range}
从上面的分析我发现过滤器并且它只调用了一次,但它没有花费时间,为什么它不需要时间?
答案 0 :(得分:0)
如果有函数调用,则会有一些时间消耗来调用该函数。
那个时间偏差很小,比毫秒还要小。
在您的Cprofile测试中,可以表示的最大时间单位是1毫秒。
如果函数的时间少于1毫秒,则Cprofile会将其显示为0毫秒。
这意味着此处过滤器花费的时间更短,我通过以下方式测试您的代码来发现这一点。
import datetime
l= [range(4) for i in range(4)]
a = datetime.datetime.now()
filter(None, l)
b = datetime.datetime.now()
c = b - a
print c.seconds
print c.microseconds
Output on my system
0
35