3 трюка с itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
Далее,
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
#модули #itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
chain
. Она позволяет "склеивать" несколько итерируемых элементов в один.Далее,
accumulate
. Эта функция немного похожа на reduce
, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min
), к каждому последующему элементу по порядку: min(11)
, min(11, 3)
, min(11, 3, 9)
и так далее.А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
combinations
. Вторым аргументом можно задать длину этой самой комбинации.#модули #itertools
Частичное применение
Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию
Предоставление функции меньшего количества аргументов, чем она ожидает, называется частичным применением функций.
Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров.
#functools
Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию
partial
из стандартной библиотеки functools
.Предоставление функции меньшего количества аргументов, чем она ожидает, называется частичным применением функций.
Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров.
#functools
Именование среза с использованием функции slice
Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке..
#трюки
Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке..
#трюки
Ускоряем код с помощью векторизации
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
По сути,
#vectorize #numpy
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
my_func
мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize
.По сути,
vectorize
преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.#vectorize #numpy