gpt4 book ai didi

python - 减少函数调用

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:54 24 4
gpt4 key购买 nike

我分析了我的 python 程序,发现以下函数运行时间过长。也许,我可以使用不同的算法并使其运行得更快。但是,我读到我也可以通过减少函数调用来提高速度,尤其是当它在循环中被重复调用时。我是一个 python 新手,想学习如何做到这一点,看看它能快多少。目前,功能是:

def potentialActualBuyers(setOfPeople,theCar,price):
count=0
for person in setOfPeople:
if person.getUtility(theCar) >= price and person.periodCarPurchased==None:
count += 1
return count

其中 setOfPeopleperson 对象的列表。我尝试了以下方法:

    def potentialActualBuyers(setOfPeople,theCar,price):
count=0
Utility=person.getUtility
for person in setOfPeople:
if Utility(theCar) >= price and person.periodCarPurchased==None:
count += 1
return count

然而,这给了我一个错误,提示 local variable 'person' referenced before assignment任何建议,如何减少函数调用或任何其他可以使代码更快的更改。

同样,我是一个 python 新手,尽管我可能会使用更好的算法,但仍然值得学习上述问题的答案。

非常感谢。

***** 编辑 *****

添加 getUtility 方法:

 def getUtility(self,theCar):
if theCar in self.utility.keys():
return self.utility[theCar]
else:
self.utility[theCar]=self.A*(math.pow(theCar.mpg,self.alpha))*(math.pow(theCar.hp,self.beta))*(math.pow(theCar.pc,self.gamma))

返回 self.utility[theCar]

***** 编辑:征求新想法 *****

关于如何进一步加快速度的任何想法。我使用亚历克斯建议的方法将时间缩短了一半。我可以进一步加快速度吗?谢谢。

最佳答案

我怀疑在这种情况下,通过提升 person.getUtility 的查找(按类,而不是按实例,正如其他实例所指出的那样),您能否获得很大的加速。也许……:

return sum(1 for p in setOfPeople
if p.periodCarPurchased is None
and p.getUtility(theCar) >= price)

但我怀疑大部分时间实际上花在了 getUtility 的执行上(并且可能花在查找 p.periodCarPurchased 上,如果它是一些奇特的属性而不是一个普通的旧属性——我将后者移到 之前,以防万一它 是一个普通属性并且可以保存一些 getUtility调用)。您的分析表明在此函数中花费的时间(扣除对其他函数的调用)与相关方法(可能还有属性)的时间比例是多少?

关于python - 减少函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com