Python | эффективность и производительность - PullRequest
0 голосов
/ 16 марта 2010

Допустим, я собираюсь сохранить 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 ]

9 голосов
/ 16 марта 2010

Узкие места возникают в неожиданных местах , поэтому никогда не оптимизируйте код только потому, что вы думаете , возможно, это был бы правильный код для улучшения. Что вам нужно сделать, это

  1. Напишите вашу программу, чтобы она полностью работала.
  2. Разработайте тесты, чтобы убедиться, что ваша программа правильная.
  3. Решите, не слишком ли медленно работает ваша программа.
    • Есть большая вероятность, что вы выйдете на этом шаге.
  4. Разработка тестов производительности, которые реально запускают вашу программу.
  5. Профилируйте код в его реалистичных тестах производительности с помощью модуля cProfile.
  6. Узнайте, какие алгоритмические улучшения могут улучшить производительность вашего кода.
    • Обычно это самый лучший способ улучшить скорость.
  7. Если вы используете лучший алгоритм для работы, выполните микрооптимизацию.
    • Переписывание критических частей в C (возможно, с использованием Cython) часто более эффективно, чем микрооптимизация в Python.
2 голосов
/ 16 марта 2010

Если generate_lglt () будет вызываться много раз, вы можете не создавать один и тот же диапазон (100,0, -1) при каждом вызове кода. Вы можете кэшировать этот сгенерированный диапазон где-нибудь и использовать его снова и снова.

Также, если вы собираетесь выходить из цикла for без завершения каждой итерации, используйте xrange вместо range.

...