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
Explicit Conversion Flag
Флаг явного преобразования используется для преобразования значения поля
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#repr #str #format
Флаг явного преобразования используется для преобразования значения поля
format
перед его непосредственным форматированием.Это поле можно использовать для переопределения поведения
format
для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:!r
– преобразует значение в строку, используя функцию repr()
!s
– преобразует значение в строку, используя функцию str()
В примере, в случае с флагом
!r
строка 'Hello'
будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s
– без кавычек (в более удобном для чтения виде).#repr #str #format
Вычисляем размер объектов в памяти
Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией
Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов.
Аргумент
Функция
#sys #sizeof #oop
Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией
sys.getsizeof(object[, default])
. Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно.Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов.
Аргумент
default
позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError
.Функция
getsizeof
вызывает метод __sizeof__
объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора.#sys #sizeof #oop
Прочитать произвольную строку из файла
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
Чтобы вывести это на экран, может помочь функция
#linecache #file
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
text.txt
:Приветствую!
Здравствуйте!
Ку, здарова.
Добрый день!
Привет!
Чтобы вывести это на экран, может помочь функция
getline
из модуля linecache
. В чем главное отличие этой функции от обычного метода чтения из файла? Функция getline
кеширует все строчки файла в списке, так что следующие вызовы get_answer
отработают моментально.#linecache #file
Параметры функции *args, **kwargs
Думаю, многие хоть раз видели такую запись, сейчас мы узнаем, что это за магические символы. Сообщу сразу, что
В примере функция принимает обязательный аргумент
В целом, конструкция с
#functions #arguments
Думаю, многие хоть раз видели такую запись, сейчас мы узнаем, что это за магические символы. Сообщу сразу, что
args
и kwargs
– общепринятые имена переменных, а разбирать мы будем звездочки перед ними.В примере функция принимает обязательный аргумент
value
, а остальных аргументов она как бы не ожидает. В таком случае *args
упаковывает все не именованные аргументы в кортеж, а **kwargs
– все именованные в словарь.В целом, конструкция с
*args, **kwargs
получается достаточно полезной, если мы не знаем, кто и в каких целях будет использовать нашу функцию. То есть, мы можем запихнуть в аргументы после такого практически всё.#functions #arguments
Pyperclip
Модуль
Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную.
Установить этот модуль можно привычным способом через пакетный менеджер
#pyperclip #модули
Модуль
pyperclip
имеет функции copy()
и paste()
, которые позволяют отправлять текст в буфер обмена вашего компьютера и получать его оттуда.Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную.
Установить этот модуль можно привычным способом через пакетный менеджер
pip
.#pyperclip #модули
How Do I
Сегодня наткнулся на модуль, который за вас может гуглить вопросы по программированию. Просто в консоли пишите
Модуль просто парсит верхние ответы со StackOverflow, и всё. Устанавливается это чудо через
#модули #howdoi
Сегодня наткнулся на модуль, который за вас может гуглить вопросы по программированию. Просто в консоли пишите
"howdoi ..."
, где вместо многоточия – ваш вопрос.Модуль просто парсит верхние ответы со StackOverflow, и всё. Устанавливается это чудо через
pip
, а для его использования, очевидно, нужен интернет.#модули #howdoi
Wikipedia в Python
В случае, если вам не хватает прошлого
Устанавливается этот модуль через пакетный менеджер
#модули #wikipedia
В случае, если вам не хватает прошлого
howdoi
, можете взглянуть на модуль, который обращается к API Википедии. Устанавливается этот модуль через пакетный менеджер
pip
. А использовать его можно без всяких трудностей – всё самое важное показано на картинке.#модули #wikipedia
Сортировка словаря по значениям
Сортировка данных словаря по значениям ключей, а не по самим ключам, нередко ставит в тупик.
Задача решается довольно просто при помощи аргумента
#словари #сортировка
Сортировка данных словаря по значениям ключей, а не по самим ключам, нередко ставит в тупик.
Задача решается довольно просто при помощи аргумента
key
функции sorted
для указания функции, которая будет вызываться на каждом элементе до сравнения.#словари #сортировка
Нахождение наиболее частых элементов списка
Если необходимо найти несколько наиболее часто повторяющихся значений, лучше воспользоваться счетчиком
Метод
#collections #counter
Если необходимо найти несколько наиболее часто повторяющихся значений, лучше воспользоваться счетчиком
Counter
из библиотеки collections
.Метод
Counter.most_common(x)
возвращает x
кортежей, в которых первое значение – элемент, а второе – количество его повторений.#collections #counter