Поскольку ваш вопрос помечен performance
, лучше всего начать с известной цитаты:
"Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация - корень всего зла . Однако мы не должны упускать наши возможности в эти критические 3% "(Д. Кнут," Структурированное программирование с переходом к утверждениям ", выделите мое)
Вы уверены, что это влияет на глобальную производительность вашего приложения?Я был бы очень удивлен, если бы 4 сравнения оказали влияние.Итак, давайте предположим, что это не проблема производительности.
Прежде всего, обратите внимание, что в Python вы можете написать:
if X < pos[0] < X2 and Y < pos[1] < Y2:
....
Но есть более важное: сделать то, что вы тестируетеясно .Как ты это объяснишь?Просто назвав его:
if pos[0] > X and pos[0] < X2 and pos[1] > Y and pos[1] < Y2:
# Do this
становится:
if area_contains(X, X2, Y, Y2, pos):
# Do this
или с пользовательским классом:
area = Area(X, X2, Y, Y2)
if area.contains(pos):
# Do this
Вы должны сделать это, даже если у вас есть только одинтест, для ясности.Функции предназначены не только для уменьшения дублирующегося кода (СУХОЙ: не повторяйтесь), но и для улучшения читабельности.Посмотрите на это:
player.skillpoints -= 1
player.health += 10
player.healthmax += 10
Почему бы и нет:
player.increase_health()
?
Не используйте объекты только как структуры: они предоставляют вам удобный способ выразить то, что вы делаете, не раскрывая детали реализации.Теперь вы можете изменить значение increase_health
, не просматривая все события, которые к нему ведут.