微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

列表理解胜出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。