过滤需要一个电话但不需要时间

时间:2014-05-29 05:50:11

标签: python python-2.7 python-3.x filter

我正在使用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}

从上面的分析我发现过滤器并且它只调用了一次,但它没有花费时间,为什么它不需要时间?

1 个答案:

答案 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