Python | эффективность и производительность
Допустим, я собираюсь сохранить 100 чисел с плавающей запятой в списке, запустив один скрипт, наиболее вероятно, что для обработки потребуется некоторое количество памяти. Так что, если этот код выполняется каждый раз, как требование приложения, будут потери производительности, поэтому мой вопрос заключается в том, как сохранить эффективность, чтобы повысить производительность.
Код макета:
def generate_lglt():
float1, float2 = 27.2423423, 12.2323245
lonlats = []
for val in range(100, 0, -1):
lonlats.append(random.uniform(float1, float2))
lonlats.append(random.uniform(float1, float2))
lonlats.append(random.uniform(float1, float2))
lonlats.append(random.uniform(float1, float2))
lonlats.append(random.uniform(float1, float2))
print lonlats
Благодарю.
2 ответа
Если generate_lglt() будет вызываться много раз, вы можете не создавать один и тот же диапазон (100,0,-1) при каждом вызове кода. Вы можете кэшировать этот сгенерированный диапазон где-нибудь и использовать его снова и снова.
Также, если вы собираетесь выходить из цикла for без завершения каждой итерации, используйте xrange вместо range.
Узкие места возникают в неожиданных местах, поэтому никогда не оптимизируйте код только потому, что вы думаете, что он может быть правильным кодом для улучшения. Что вам нужно сделать, это
- Напишите свою программу, чтобы она полностью работала.
- Разработайте тесты, чтобы убедиться, что ваша программа правильная.
- Решите, будет ли ваша программа слишком медленной.
- Есть большая вероятность, что вы уйдете с этого шага.
- Разрабатывайте тесты производительности, которые реально запускают вашу программу.
- Профилируйте код в его реалистичных тестах производительности, используя
cProfile
модуль. - Выясните, какие алгоритмические улучшения могут улучшить производительность вашего кода.
- Обычно это самый лучший способ улучшить скорость.
- Если вы используете лучший алгоритм для работы, выполните микрооптимизацию.
- Переписывание критических частей в C (возможно, с использованием Cython) часто более эффективно, чем микрооптимизация в Python.