Я профилировал свою программу на 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
, где setOfPeople
- список person
объектов. Я попробовал следующее:
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))
return self.utility [theCar]
***** РЕДАКТИРОВАТЬ: запрашивать новые идеи *****
Любые идеи, как ускорить это дальше. Я использовал метод, предложенный Алексом, чтобы сократить время пополам. Могу ли я ускорить это дальше?
Спасибо.