Последние новости:

Поиск по сайту:

Гвардия сдается, но не умирает (И. Бабель).

4 совета по оптимизации производительности для более быстрого кода на Python1 мин для чтения

FavoriteLoadingДобавить в избранное
21.11.2019
Как установить Python 3 на Ubuntu 16.04 LTS

Python является одной из самых популярных сред программирования. Давайте посмотрим на некоторые советы, которые следует иметь в виду, чтобы правильная программа на Python оставалась в рамках ограничений платформы для решения задач.

 

1. Подготовьте все настройки заранее.

Это здравый смысл. Подготовьте все настройки. Запустите ваш редактор Python заранее. Если вы пишете свои файлы локально, создайте виртуальную среду и активируйте ее. Наряду с этим, мы бы посоветовали еще одну вещь, которая может показаться немного противоречивой и нелогичной, а именно использовать TDD. Используйте этот инструмент тестирования. Мы обычно использую pytest и используем «pip» -d в виртуальной среде и начинаем писать небольшие тестовые сценарии. Мы обнаружили, что тестирование помогает в ясности мысли, которая помогает в написании более быстрых программ. Кроме того, это помогает в рефакторинге кода, чтобы сделать его быстрее. Мы вернемся к этому позже.

 

2. Получите код, работающий первым

У людей есть свои собственные стили кодирования. Используйте стиль кодирования, который вам наиболее удобен. Для первой итерации сделайте код работоспособным. Посмотрим, пройдет ли он все тестовые случаи. И вы можете перейти к следующему вопросу.

Если он проходит для некоторых тестовых случаев, а для других — из-за проблем с памятью, то вы знаете, что еще есть работа.

 

3. Советы по программированию на Python

Мы можем использовать некоторые конструкции кода pythonic, которые дают нам лучшую производительность. Давайте посмотрим на них ниже.

 

Строки:

Не используйте нижеприведенную конструкцию.

s = ""
for x in somelist:
s += some_function(x)

 

Вместо этого используйте это

slist = [some_function(el) for el in somelist]
s = "".join(slist)

 

Это связано с тем, что в Python str является неизменным, поэтому левая и правая строки должны быть скопированы в новую строку для каждой пары конкатенации.

Читать  Протокол связи при проектировании системы

 

Языковые конструкции:

Функции: Создайте функции из своего кода, и хотя процедурный код поддерживается в Python, лучше писать их в функциях. Возможно, вы слышали этот совет от сторонников повторного использования кода и сторонников TDD (примечание: я один из них), но здесь мы бы сказали, что функции лучше, потому что они быстрее. Так

def main():
for i in xrange(10**8):
pass

main()

 

Это лучше, чем

for i in xrange(10**8):
pass

 

Это из-за базовой реализации CPython. Короче говоря, хранить локальные переменные быстрее, чем глобальные.

Мы бы порекомендовали вам сохранить ваш процедурный код как можно меньше. Вы можете использовать следующий стандартный шаблон.

def solution(args):
# write the code
pass

def main():
# write the input logic to take the input from STDIN
Input_args = ""
solution(input_args)

If __name__ == "__main__":
main()

 

Используйте стандартную библиотеку:

Используйте как можно больше встроенных функций и стандартной библиотеки. Поэтому вместо этого:

newlist = []
for item in oldlist:
newlist.append(myfunc(item))

 

Использовать это:

newlist = map(myfunc, oldlist)

 

Существует также список выражений или генератор выражений.

newlist = [myfunc(item) for item in oldlist] # list expression
newlist = (myfunc(item) for item in oldlist) # generator expression

 

Точно так же используйте стандартную библиотеку, такую ​​как itertools, так как они обычно быстрее и оптимизированы для обычных операций. Таким образом, вы можете иметь что-то вроде перестановки для цикла всего за три строки кода.

>> import itertools
>>> iter = itertools.permutations([1,2,3])
>>> list(iter)
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

 

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

 

Генераторы:

Генератор Python — это функция, которая возвращает итератор генератора (просто объект, который мы можем перебрать), вызывая yield. Когда функция генератора вызывает yield, «состояние» функции генератора останавливается; Значения всех переменных сохраняются, и следующая строка кода, которая должна быть выполнена, записывается до следующего вызова (). Генераторы — это отличные конструкции, позволяющие снизить как среднюю сложность времени, так и объем памяти кода, который вы написали. Просто посмотрите на следующий код для простых чисел.

def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b

 

Читать  Проблемы с практикой Python. Приготовьтесь к следующему собеседованию. Решение головоломки судоку. Часть 4.1

Таким образом, это будет продолжать генерировать числа Фибоначчи бесконечно без необходимости хранить все числа в списке или любой другой конструкции. Пожалуйста, имейте в виду, что вы должны использовать эту конструкцию только тогда, когда у вас нет абсолютной необходимости сохранять все сгенерированные значения, потому что тогда вы потеряете преимущество наличия конструкции генератора.

 

4. Алгоритмы и структуры данных

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

Точно так же продолжайте читать из всех источников наиболее эффективные структуры данных и алгоритмы, которые вы можете использовать. Ведите инвентаризацию общих структур данных, таких как узлы и графики, и запоминайте или сохраняйте удобный журнал о ситуациях, когда они являются наиболее подходящими.

Написание быстрого кода — это привычка и навык, который нужно оттачивать годами. Там нет ярлыков. Так что делайте все возможное и удачи.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно

Статьи партнеров:

Рекомендуемое
Docker - отличный инструмент для запуска нескольких сервисов на одном…
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close