内置函数比用户定义的函数需要更多的执行时间? 蟒蛇

问题描述

import time

startTime = time.time()

def oddList(arr):

  a=[]

  for element in arr:

    if element%2 == 0:

      a.append(element)

    return a
    
arr = [i for i in range(8)]

for i in range(1000000):

  odd = (list(filter(lambda x: x%2 == 0,arr)))

  # odd = oddList(arr)
        
    
endTime = time.time()

print(endTime - startTime,"utilizing the in-built method")

如果我使用用户定义的函数oddList,为什么它比内置函数花费的时间更少?我不明白为什么会发生这种情况,因为两者都在做同一件事。

User-defined function

In-built function

解决方法

区别在于filter为每个比较调用lambda函数。这意味着仅需测试x%2就需要构造一个新的函数对象和堆栈框架。它(调用函数,比较,返回结果,比较结果)与(比较)之间的差。第三种方法是使用列表理解。重做您的测试

import time

def oddList(arr):
    a=[]
    for element in arr:
        if element%2:
            a.append(element)
    return a

arr=[i for i in range(8)]

startTime = time.time()
for i in range(1000000):
    odd=(list(filter(lambda x: x%2,arr)))
print("filter",time.time()-startTime)

startTime = time.time()
for i in range(1000000):
    odd=oddList(arr)
print("function",time.time()-startTime)

startTime = time.time()
for i in range(1000000):
    odd=[n for n in arr if n%2]
endTime=time.time()
print("comprehension",time.time() - startTime)

我知道了

filter 0.7806670665740967
function 0.5075747966766357
comprehension 0.43089747428894043

列表理解胜出。