3 трюка с itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
Далее,
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
#модули #itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
chain
. Она позволяет "склеивать" несколько итерируемых элементов в один.Далее,
accumulate
. Эта функция немного похожа на reduce
, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min
), к каждому последующему элементу по порядку: min(11)
, min(11, 3)
, min(11, 3, 9)
и так далее.А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
combinations
. Вторым аргументом можно задать длину этой самой комбинации.#модули #itertools
Правильным ответом является [1, 2]
Происходит так из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте функции
А для того, чтобы добиться правильного поведения функции, следует воспользоваться ключевым словом
Происходит так из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте функции
defaults
, который создается один раз в момент определения функции.А для того, чтобы добиться правильного поведения функции, следует воспользоваться ключевым словом
None
при определении аргументов по-умолчанию.Частичное применение
Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию
Предоставление функции меньшего количества аргументов, чем она ожидает, называется частичным применением функций.
Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров.
#functools
Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию
partial
из стандартной библиотеки functools
.Предоставление функции меньшего количества аргументов, чем она ожидает, называется частичным применением функций.
Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров.
#functools
Именование среза с использованием функции slice
Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке..
#трюки
Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке..
#трюки
Ускоряем код с помощью векторизации
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
По сути,
#vectorize #numpy
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
my_func
мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize
.По сути,
vectorize
преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.#vectorize #numpy
Explicit Conversion Flag
Флаг явного преобразования используется для преобразования значения поля
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#repr #str #format
Флаг явного преобразования используется для преобразования значения поля
format
перед его непосредственным форматированием.Это поле можно использовать для переопределения поведения
format
для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:!r
– преобразует значение в строку, используя функцию repr()
!s
– преобразует значение в строку, используя функцию str()
В примере, в случае с флагом
!r
строка 'Hello'
будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s
– без кавычек (в более удобном для чтения виде).#repr #str #format