интересные скрипты на python
22 полезных примера кода на Python
Python — один из самых популярных языков программирования, чрезвычайно полезный и в решении повседневных задач. В этой статье я вкратце расскажу о 22 полезных примерах кода, позволяющих воспользоваться мощью Python.
Некоторые из примеров вы могли уже видеть ранее, а другие будут новыми и интересными для вас. Все эти примеры легко запоминаются.
1. Получаем гласные
2. Первая буква в верхнем регистре
Этот пример используется для превращения каждой первой буквы символов строки в прописную букву. Он работает со строкой из одного или нескольких символов и будет полезен при анализе текста или записи данных в файл и т.п.
3. Печать строки N раз
Этот пример может печатать любую строку n раз без использования циклов Python.
4. Объединяем два словаря
Этот пример выполняет слияние двух словарей в один.
5. Вычисляем время выполнения
Этот пример полезен, когда вам нужно знать, сколько времени требуется для выполнения программы или функции.
6. Обмен значений между переменными
Это быстрый способ обменять местами две переменные без использования третьей.
7. Проверка дубликатов
Это самый быстрый способ проверки наличия повторяющихся значений в списке.
8. Фильтрация значений False
9. Размер в байтах
Этот пример возвращает длину строки в байтах, что удобно, когда вам нужно знать размер строковой переменной.
10. Занятая память
Пример позволяет получить объём памяти, используемой любой переменной в Python.
11. Анаграммы
Этот код полезен для проверки того, является ли строка анаграммой. Анаграмма — это слово, полученное перестановкой букв другого слова.
12. Сортировка списка
Этот пример сортирует список. Сортировка — это часто используемая задача, которую можно реализовать множеством строк кода с циклом, но можно ускорить свою работу при помощи встроенного метода сортировки.
13. Сортировка словаря
14. Получение последнего элемента списка
15. Преобразование разделённого запятыми списка в строку
Этот код преобразует разделённый запятыми список в единую строку. Его удобно использовать, когда нужно объединить весь список со строкой.
16. Проверка палиндромов
Этот пример показывает, как быстро проверить наличие палиндромов.
17. Перемешивание списка
18. Преобразование строки в нижний и верхний регистры
19. Форматирование строки
Этот код позволяет форматировать строку. Под форматированием в Python подразумевается присоединение к строке данных из переменных.
20. Поиск подстроки
Этот пример будет полезен для поиска подстроки в строке. Я реализую его двумя способами, позволяющими не писать много кода.
21. Печать в одной строке
Мы знаем, что функция print выполняет вывод в каждой строке, и если использовать две функции print, они выполнят печать в две строки. Этот пример покажет, как выполнять вывод в той же строке без перехода на новую.
22. Разбиение на фрагменты
Этот пример покажет, как разбить список на фрагменты и разделить его на меньшие части.
На правах рекламы
Серверы для разработчиков — выбор среди обширного списка предустановленных операционных систем, возможность использовать собственный ISO для установки ОС, огромный выбор тарифных планов и возможность создать собственную конфигурацию в пару кликов, активация любого сервера в течение минуты. Обязательно попробуйте!
Пять простых примеров, которые сподвигнут тебя изучить Python
Содержание статьи
Языки становятся популярными по разным причинам, иногда просто из-за отсутствия других решений для определенной ниши. Успех Python, на мой взгляд, вполне заслужен — его легко изучать, приятно использовать, и на нем можно начать писать полезные программы довольно скоро.
В Python смысл выражений почти всегда очевиден, а все ошибки сопровождаются исключениями, из которых легко понять, что пошло не так. Например, если мы попытаемся записать в массив по несуществующему индексу, то сразу получим ошибку с исчерпывающим описанием проблемы.
При выборе языка для нового проекта нужно учитывать не только свойства самого языка, но и его экосистему: библиотеки, инструменты разработки, да и сообщество пользователей. С этим у Python все отлично. Его поддерживают многие популярные IDE, а некоторые среды даже разработаны специально для него, как PyCharm. Есть множество инструментов анализа и отладки, например, py-spy — профайлер, которым можно подключиться к работающей программе и в реальном времени смотреть, какие функции выполняются и сколько времени занимают.
Число библиотек для самых разных целей тоже огромно. Некоторые из них стали настолько популярны, как TensorFlow, pandas, или NumPy, что люди используют Python для машинного обучения и анализа данных специально, чтобы ими воспользоваться. В DevOps не менее популярны Ansible и Saltstack.
В сочетании с неплохой производительностью, это позволяет применять Python как для коротких скриптов и разовых задач, так и для больших приложений. Как и любой другой язык, Python не универсален и не всегда является лучшим выбором для конкретной задачи, но он покрывает достаточно большой класс задач и требований к производительности, чтобы для многих проектов быть основным или единственным языков. При недостатке производительности подмножество Python можно компилировать в машинный код с помощью Cython, или переписать на другом языке и взаимодействовать с ним через FFI.
Самое главное: с помощью нужных библиотек, решать многие задачи просто. Даже для начинающего разработчика Python быстро станет помощником в повседневных задачах. Именно поэтому его часто выбирают для изучения в качестве первого языка, и существует множество курсов, где с этим помогают — например, в онлайн школе SkillFactory.
Школа SkillFactory — спонсор этой публикации. Со SkillFactory ты можешь пройти курс «Python для веб-разработки» и освоить полный стек технологий для создания сайтов, приложений и сервисов. Для студентов предусмотрена помощь наставника; в процессе обучения студент формирует портфолио, которое потом сможет показать работодателю.
Чтобы продемонстрировать мощь Python, я выбрал ряд библиотек, которые не требуют сложной установки зависимостей или наборов данных, и позволяют сделать что-то полезное всего за несколько строк кода.
Виртуальные окружения
Для разработки и тестирования пользователи Python часто применяют виртуальные окружения (virtual environments). В Python 2.x их поддержка была реализована опциональным модулем, но в Python3 уже есть встроенная поддержка, так что для их установки ничего делать не нужно.
Каждое окружение живет в своем каталоге, поэтому устанавливать в него модули можно от имени обычного пользователя. Если ты необратимо сломал свое окружение, можно просто удалить каталог и пересоздать его. Не менее полезно бывает создать чистое окружение чтобы убедиться, что твоя библиотека или приложение чисто устанавливается из исходников и работает.
Создать и активировать виртуальное окружение очень просто. На UNIX-подобных системах это делается так:
Чтобы не засорять рабочую систему лишними модулями, все примеры лучше пробовать именно в виртуальном окружении.
Замена скриптов на shell
Скрипты на Bourne shell — классика системного администрирования и автоматизации, но как язык программирования, шелл так и остался в семидесятых. Его собственные средства отладки и обработки ошибок примитивны, к тому же, если ты хочешь сделать скрипт кроссплатформенным, нужно тщательно избегать «башизмов» и всего, что не входит в стандарт POSIX. Инструменты вроде ShellCheck могут с этим помочь, но можно пойти и другим путем — не использовать Shell вовсе.
В стандартной библиотеке Python уже есть ряд модулей, которые сделают за тебя половину работы. К примеру, скопировать файл с помощью функции из модуля shutil можно в одну строку.
Выполнить команду и получить ее код завершения и вывод ничуть не сложнее.
Иногда бывает сложно обойтись без передачи пользовательского ввода внешней команде. Это открывает простор для уязвимостей типа shell injection и требует внимания к деталям. К счастью, в стандартной библиотеке уже есть функция, которая добавит кавычки и экранирует опасные символы.
Разбор веб-страниц
Разбор веб-страниц (scraping) нужен для многих целей: от борьбы с сервисами, которые не предоставляют API, до создания поисковых систем.
Для демонстрации мы извлечем заголовки новостей с главной страницы журнала. C помощью библиотеки requests и парсера HTML BeautifulSoup мы можем сделать это всего в несколько строк.
Сохрани в файл вроде xakep-headings.py и выполни python3 xakep-headings.py или просто скопируй в интерпретатор, и ты увидешь все свежие новости.
Веб-приложения
На Python есть большие фреймворки MVC, такие как весьма популярный Django. Но есть и легковесные библиотеки, с которыми можно за пару строк кода превратить любую функцию в веб-сервис.
Один из самых популярных микрофреймворков — Flask. Для демонстрации напишем сервис, который в ответ на запрос /add/x/y выдает сумму чисел x и y.
Установим Flask командой pip3 install flask и сохраним вот этот код в файл myapp.py :
Если тебе не понравился Flask, можно вместо него посмотреть на Bottle — он ничуть не сложнее в использовании.
Обработка естественного языка
Обработка естественного языка традиционно считается сложной и специализированной задачей. Библиотеки для этой цели весьма развиты, но не слишком просты в использовании.
Однако, модуль TextBlob предоставляет простой интерфейс к библиотеке NLTK. Перед использованием нам нужно поставить саму библиотеку и скачать наборы данных для нее:
Теперь попробуем написать функцию, которая возвращает существительное во множественном числе.
Скопируй это все в интерпретатор и попробуй в действии.
Так же просто разбить текст на предложения:
В TextBlob есть много других возможностей, например, разбор на члены предложения — очень пригодится, если хочешь написать текстовый квест или чат-бота.
Заключение
Это всего несколько примеров, но репозиторий пакетов PyPI огромен и каждый найдет там что-то для себя. Когда ты только изучаешь язык, нет ничего плохого в том, чтобы написать свое решение давно решенной задачи. Но вот если тебе нужно быстрое решение насущной задачи вроде работы с каким-нибудь форматом файла или взаимодействия с сервисом, не забудь поискать в репозитории — скорее всего оно там уже есть.
SkillFactory
Школа по работе с данными. Обучение Big Data, Data Science, Machine Learning, Data Engineering и AI
Экспекто Питонум: 15 заклинаний на змеином языке
Короткие программы на Python — первый шаг к реальной магии кода.
Веб-разработка и научные вычисления, роботы и Data Science — Python повсюду. На нём пишут и масштабные проекты, и короткие программы (скрипты, или сниппеты), полезные в повседневных рабочих и учебных задачах.
Собрали для вас коллекцию таких небольших «заклинаний». Основной принцип: минимум строк кода, в котором можно разобраться максимум за полминуты. Сову из Хогвартса мы не гарантируем, но удивить однокашников, коллег и интервьюеров, уверены, у вас получится. Вперёд!
Внимание: устное произнесение заклинаний в текущей версии Python не поддерживается. Вам потребуется компьютер, интерпретатор и код.
С некоторых пор утверждает, что он data scientist. В предыдущих сезонах выдавал себя за математика, звукорежиссёра, радиоведущего, переводчика, писателя. Кандидат наук, но не точных. Бесстрашно пишет о Data Science и программировании на Python.
Анаграммус Ревелио: определение строк-анаграмм
Скрипт проверяет, являются ли две строки анаграммами друг друга. Иными словами, не получена ли одна строка перестановкой символов другой строки.
Используется Counter из библиотеки collections — это разновидность словаря, используемая для подсчёта элементов в итерируемых объектах: списках, кортежах, словарях, строках.
Подробнее об этой замечательной библиотеке читайте в нашей статье.
Мемориа Байтифай: размер объекта в байтах
Этот скрипт используется для измерения количества памяти, потребляемой любым объектом в Python: переменной, функцией, классом.
Обратите внимание, что учитывается только та память, которую занимает сам объект, а не те объекты, на которые он, возможно, ссылается. Размер памяти возвращается в байтах.
Лексиа Байтифай: длина строки в байтах
Метод для определения длины строки в байтах. Это не то же самое, что размер объекта из скрипта выше.
Байтовый размер объекта-строки в памяти всегда больше байтовой длины строки, поскольку объект-строка содержит и саму строку, и дополнительную информацию о ней — например, ссылки на методы строк.
Албум Диффиндо: нарезка списка
Этот код нарезает список на списки меньшего размера, которые собраны снова в список. Размер надо задать заранее.
Как видим, последний список получился короче: 4 элемента вместо 7. Проверьте, что будет, если размер нарезаемых списков задать больше, чем составляет длина начального списка.
В статье про списки вы узнаете чуть больше об этом полезном типе данных.
Албум Прессио: сжатие списка
Этот скрипт удаляет «ложные» значения ( False, None, 0 и пустую строку ‘ ‘) из списка. Используется встроенная функция filter(): c параметром None на первом месте она удалит из списка lst все значения, которые не вернут True по умолчанию.
Проверить вручную какое-либо значение на True/False можно с помощью функции bool(): bool(0) вернёт False, но bool(‘0’) уже будет True, так как это непустая строка.
Примеры использования функции filter () можно найти здесь.
Матрикус Транспозио: транспонирование матрицы
В простейшем случае двумерная матрица может быть задана списком из нескольких списков одинаковой длины, которые представляют собой строки матрицы. Если вам требуется «повернуть на 90 градусов» такую матрицу или превратить строки в столбцы (транспонировать, как говорят математики), то вот короткий код:
Обратите внимание, что в итоговом списке элементами (то есть строками новой матрицы) будут кортежи — так работает используемая здесь функция zip ().
Албум Планум: сделать список плоским
Ох уж эти списки, состоящие из списков. Как бы их сделать попроще, выстроить в один ряд? Для этого тоже есть решение.
В третьей строке код проверяет, не является ли элемент списком. Если да, то использует метод extend() для расширения этим элементом итогового списка, если нет — то присоединяет его как одиночный элемент методом append().
Также в этой строке функция вызывает сама себя и, в случае списков, состоящих из списков, «проваливается» в них до тех пор, пока не доберётся до элементов, не являющихся списками. Это называется рекурсией.
Дуплицио Ревелио: проверка на дубликаты
Этот простой скрипт проверяет, содержатся ли в списке повторяющиеся значения (дубликаты). Используется свойство множеств set, которые могут содержать только уникальные элементы.
Вместо списков могут быть и кортежи, и словари. В последнем случае проверка будет выполняться только среди ключей словаря.
Вокабулари Юнифай: объединить два словаря
Для того чтобы объединить два словаря, есть как минимум два способа: прямой и современный.
Обратите внимание на то, что значения итогового словаря будут зависеть от порядка исходных словарей в функциях: если переставить местами словари a и b, значение ключа ‘y’ изменится на 2.
Фрекуэнтиа: самый частый элемент
Этот короткий скрипт вернёт элемент, чаще всего встречающийся в списке.
Используются продвинутые параметры встроенной функции max():
В качестве аргумента можно использовать списки, кортежи и строки.
Палиндромус Ревелио: проверка строки на палиндром
Простой вариант этого кода проверяет, является ли слово без пробелов и знаков препинания, написанное в одном регистре, палиндромом.
Албум Миксио: перемешать элементы списка
Этот сниппет поможет вам изменить порядок элементов списка на случайный. Обратите внимание на то, что функция shuffle из библиотеки random меняет исходный список.
Подробнее про библиотеку random и случайные числа в Python читайте в нашей статье.
Албум Датум: список дат из диапазона
Этот код получает две даты (начальную и конечную) и создаёт список из дат между ними, включая начальную и исключая последнюю.
Для получения дней между начальной и конечной датой используется datetime.timedelta.days.
Нумерум Нумерио: число в список цифр
Превращает целое число в список его цифр.
Функция map() принимает желаемый тип выходных данных (в нашем случае это int, целые числа) и итерируемый объект (строку, список или кортеж), элементы которого можно превратить в элементы этого типа. После этого другая функция list() преобразует результат в список.
Нумерум Романио: преобразовать число в римскую запись
Преобразует число в обычной десятичной («арабской») записи в форму римского числа. Работает со значениями от 1 до 3999 включительно, возвращает строку (str).
Сначала создаётся список кортежей вида (число, его римская запись). Далее цикл бежит по нему и с помощью функции divmod() производит целочисленное деление с остатком, меняя входящее число на остаток. Соответствующие результаты деления умножаются на строку римской записи и присоединяются к итоговой строке res.
Акцио Пайтон: Python в каждый дом!
Составление и изучение таких микропрограмм помогает лучше понять типы данных в Python, узнать о свойствах и параметрах функций. На сайте 30 seconds of code есть ещё больше коротких программ как для Python, так и для других языков программирования.
Источником вдохновения для названий этих скриптов послужили, конечно, книги Джоан Роулинг, а полный справочник по магическим заклинаниям мира Гарри Поттера можно посмотреть здесь.
На курсах «Профессия Python-разработчик» вы узнаете, насколько полезными могут быть такие небольшие программы, сниппеты и скрипты. Вы научитесь не только колдовать красиво решать задачи с их помощью, но и воплощать гораздо более сложные проекты. Приходите!
обложка: Darshan Patel / Unsplash / Pixabay / Pexels / Colowgee для Skillbox Media
Разработка надёжных Python-скриптов
Python — это язык программирования, который отлично подходит для разработки самостоятельных скриптов. Для того чтобы добиться с помощью подобного скрипта желаемого результата, нужно написать несколько десятков или сотен строк кода. А после того, как дело сделано, можно просто забыть о написанном коде и перейти к решению следующей задачи.
Если, скажем, через полгода после того, как был написан некий «одноразовый» скрипт, кто-то спросит его автора о том, почему этот скрипт даёт сбои, об этом может не знать и автор скрипта. Происходит подобное из-за того, что к такому скрипту не была написана документация, из-за использования параметров, жёстко заданных в коде, из-за того, что скрипт ничего не логирует в ходе работы, и из-за отсутствия тестов, которые позволили бы быстро понять причину проблемы.
При этом надо отметить, что превратить скрипт, написанный на скорую руку, в нечто гораздо более качественное, не так уж и сложно. А именно, такой скрипт довольно легко превратить в надёжный и понятный код, которым удобно пользоваться, в код, который просто поддерживать как его автору, так и другим программистам.
Исходный код
Вот исходный код Python-скрипта, который позволяет решить задачу:
Поговорим о том, как его улучшить.
Документация
Я считаю, что полезно писать документацию до написания кода. Это упрощает работу и помогает не затягивать создание документации до бесконечности. Документацию к скрипту можно поместить в его верхнюю часть. Например, она может выглядеть так:
В первой строке даётся краткое описание цели скрипта. В оставшихся абзацах содержатся дополнительные сведения о том, что именно делает скрипт.
Аргументы командной строки
Следующей задачей по улучшению скрипта станет замена значений, жёстко заданных в коде, на документированные значения, передаваемые скрипту через аргументы командной строки. Реализовать это можно с использованием модуля argparse. В нашем примере мы предлагаем пользователю указать диапазон чисел и указать значения для «fizz» и «buzz», используемые при проверке чисел из указанного диапазона.
Модуль argparse — это весьма мощный инструмент. Если вы с ним не знакомы — вам полезно будет просмотреть документацию по нему. Мне, в частности, нравятся его возможности по определению подкоманд и групп аргументов.
Логирование
Если оснастить скрипт возможностями по выводу некоей информации в ходе его выполнения — это окажется приятным дополнением к его функционалу. Для этой цели хорошо подходит модуль logging. Для начала опишем объект, реализующий логирование:
Добавим в код проекта следующую функцию для настройки логирования:
Основной код скрипта при этом изменится так:
Тесты
Модульные тесты — это полезнейшее средство для проверки того, ведёт ли себя приложения так, как нужно. В скриптах модульные тесты используют нечасто, но их включение в скрипты значительно улучшает надёжность кода. Преобразуем код, находящийся внутри цикла, в функцию, и опишем несколько интерактивных примеров её использования в её документации:
Проверить правильность работы функции можно с помощью pytest :
В случае возникновения ошибки pytest выведет сообщение, указывающее на расположение соответствующего кода и на суть проблемы:
Модульные тесты можно писать и в виде обычного кода. Представим, что нам нужно протестировать следующую функцию:
В конце скрипта добавим следующие модульные тесты, использующие возможности pytest по использованию параметризованных тестовых функций:
Если произойдёт ошибка — pytest даст полезные сведения о том, что случилось:
Итоги
Сделать Python-скрипты надёжнее можно, выполнив следующие четыре шага:
Вокруг этого материала развернулись интересные обсуждения — найти их можно здесь и здесь. Аудитория, как кажется, хорошо восприняла рекомендации по документации и по аргументам командной строки, а вот то, что касается логирования и тестов, показалось некоторым читателям «пальбой из пушки по воробьям». Вот материал, который был написан в ответ на данную статью.
Уважаемые читатели! Планируете ли вы применять рекомендации по написанию Python-скриптов, данные в этой публикации?
И еще несколько полезных библиотек для Python (с примерами)
Введение
У python одно из самых крупных комьюнити, это обусловлено тем, что этот язык любят многие за его простоту и универсальность. Очень много энтузиастов, которые создают всё новые и новые библиотеки для облегчения разработки, поэтому среди всего этого разнообразия каждый может подобрать несколько библиотек для себя. На github существует много проектов, которые можно встроить к себе в проект, чтобы оптимизировать, улучшить или просто расширить его функционал.
Хотелось бы рассмотреть несколько интересных на мой взгляд библиотек.
Стилизация print
icecream
Для форматирования вывода существует одна удобная библиотека под названием icecream. Она помогает упростить написание логов или принтов для отладки. Рассмотрим пример её работы:
Чтобы подключить информацию о том, в каком месте программы происходит вывод, необходимо добавить всего лишь один аргумент в конфигурации модуля:
Это помогает более точно понять в каком месте происходит сбой в работе программы:
Также можно поменять префикс, который добавляется в начале строки, по дефолту он задан “ic|”. Удобно добавить время для вывода, чтобы видеть в какой момент времени и сколько занимал переход от одного принта к другому.
Если у вас уже имеются расставленные принты в коде, то легко можно переприсвоить print на ic:
Рассмотрим пример вывода более сложных структур, например, словарей:
Как видно на скриншоте, то вывод данных в таком формате читать гораздо легче, нежели обычный принт.
Также эта библиотека предоставляет возможность стилизовать вывод в зависимости от предоставляемых данных. Например, если есть необходимость дополнительно оформлять текст ошибки (Exception) или есть желание дополнительно выводить тип данных:
colorama
Многопоточность (многозадачность)
multitasking
Достаточно выполнить простую установку: pip install multitasking и далее оборачивать метод декоратором @task
И если удалить @multitasking.task, код выполнится последовательно:
Связь с другими языками
pythonnet
Иногда возникает потребность запустить код, написанный на другом языке, через Python, например, в целях проверки работы какого-либо стороннего модуля или для оптимизации кода. Существует несколько библиотек, позволяющих сделать это, например, pythonnet позволяет запустить некоторую часть кода, написанную на C# в Python (pythonnet позволяет рассматривать множество элементов clr, как модули в python).
Обращаемся к C# через Python
JPype
Создание десктопных приложений и UI
Для работы с созданием графических приложений есть несколько популярных библиотек, в частности встроенный tkinter и Qt. Но когда необходимо сделать красивое, легковесное графическое приложение, то хотелось бы использовать что-то более мощное, например, html+css+js, именно с этим может помочь библиотека EEL. Она позволяет создать десктопное приложение, где в качестве графической оболочки используется html, css и js (можно использовать различные фреймворки), а в качестве языка для написания бэк-части используется Python (подробнее тут).
Приведем простой пример использования библиотеки. Python код:
И сама структура проекта должна выглядеть так:
Можно запустить файл main.py и убедиться, что всё работает:
Анимация математических операций и функций
manim
Для создания различного рода графика существуют популярные библиотеки по типу matplotlib, seaborn (построенный поверх matplotlib и pandas). Но хотел бы отметить библиотеку, позволяющую создавать анимации различных графиков, функций и различного рода пользовательских текстов: Manim.
Также более серьёзный пример работы:
Оценка производительности
pympler
Потребление памяти в Python отдельная проблема, которой можно посвятить много времени, поэтому зачастую приходится следить за тем, чтобы python не сожрал всю оперативку. Для проверки памяти есть замечательный модуль pympler, который поможет не только посмотреть память, занимаемую объектом, но также поможет проследить за памятью, которую занимают отдельные классы или типы данных:
Проследим за изменением памяти, занимаемой классом A:
И в целом за памятью, занимаемой различными структурами
py-spy
Но знать распределение памяти зачастую недостаточно, так как программа может тормозить и не выполнять работу за ожидаемое время. В таком случае необходимо отследить, какие процессы сколько времени занимают.
В таком случае можно воспользоваться библиотекой py-spy, она позволяет без остановки программы проверить, сколько времени какие процессы в ней занимают. Установить библиотеку можно через pip install py-spy. Усложним код предыдущей программы, создадим дополнительный модуль sec.py:
Обработка языков
pymorphy2
Плюсы этой библиотеки в том, что она позволяет обрабатывать до нескольких десятков тысяч слов в секунду, занимает мало памяти и основана на словаре opencorpora.
Небольшой пример использования библиотеки:
Заключение
Существует огромное количество малоизвестных библиотек, которые могут облегчить жизнь разработчику, поэтому в огромном сообществе python-разработчиков всегда можно найти что-то для своего проекта, что поможет расширить функционал вашего проекта или ускорить работу как самого проекта, так и его разработки.