Букварь известных и не очень возможностей Python для простой и приятной разработки. 26 модулей, приемов и хитростей, о которых вы могли не знать.
Python сейчас находится на пике популярности. Он очень востребован во всех сферах программирования, и это неслучайно, ведь язык:
- легок в осваивании;
- суперуниверсален;
- имеет множество полезных модулей.
Чтобы работать с ним стало еще удобнее, возьмите на вооружение несколько полезных советов. Некоторые из них найдены в документации стандартной библиотеки, другие – в PyPi. Четыре или пять обнаружились на awesome-python.com.
all or any: все или хоть что-нибудь
Python – удивительно простой и выразительный язык. Его даже иногда называют «выполняемым псевдокодом». И с этим трудно поспорить, когда вы можете себе позволить конструкции, подобные этим:
bashplotlib: графики в терминале
А вы знали, что можно строить графики прямо в командной строке? Теперь знаете. За одну из самых удобных возможностей языка отвечает модуль bashplotlib.
collections: коллекции на любой вкус
Встроенные типы данных в Python – высший класс, но иногда хочется чего-то большего. Что ж, если хочется, обратитесь к модулю collections и выбирайте дополнительную структуру на свой вкус.
dir: что внутри?
Хотелось ли вам когда-нибудь заглянуть в объект и увидеть, какими свойствами он обладает? Разумеется, в Python вы можете это сделать.
Это одна из самых важных возможностей Python для интерактивного запуска и отладки кода. Подробнее функция dir() описана в документации.
emoji: Python – ?
Не притворяйтесь, что не будете этого делать.
__future__: импорт из будущего
Следствием популярности языка является постоянная разработка новых версий. Это значит, что регулярно появляется множество новых функций и возможностей Python. Но как быть, если у вас устаревшая версия?
Модуль __future__ позволяет импортировать функциональность из будущего. Это практически путешествие во времени – настоящее волшебство.
geopy: где я нахожусь?
Программист может легко запутаться в географических объектах, но не с модулем geopy.
Он взаимодействует с различными сервисами геокодирования и позволяет легко получить адрес искомого места, а также географические характеристики, включая даже высоту над уровнем моря.
Кроме того, вы можете подсчитать расстояние между двумя объектами в ваших любимых единицах.
howdoi: StackOverflow прямо в терминале
Застряли во время разработки и никак не можете поймать за хвост решение, которое уже точно где-то видели? Надо идти на StackOverflow, но не хочется выходить из консоли?
Задавайте любой вопрос, howdoi найдет что вам посоветовать.
Инструмент собирает самые популярные ответы со StackOverflow, хотя они не всегда могут помочь…
inspect: что здесь происходит?
Модуль inspect – отличный помощник, когда нужно разобраться, что происходит в вашем коде. Он может инспектировать даже сам себя!
В примере метод getsource() применяется, чтобы вывести исходный код inspect. А getmodule() распечатает модуль, в котором он был определен.
Последняя строчка просто выводит номер строки.
Конечно же, эти примитивные примеры не описывают все возможности модуля inspect. Это отличное решение для создания самодокументированного кода.
Jedi: будь джедаем
Библиотека создана для автодополнения в процессе разработки и статического анализа. С ней можно кодить быстрее и продуктивнее.
Jedi можно подключить как плагин для редактора. Но возможно, что вы уже имеете с ней дело. Например, IPython использует ее функциональность.
**kwargs: словарь аргументов
Понимание таинственного звездного синтаксиса – важный этап в изучении Python.
Двойная звездочка означает, что содержимое словаря kwargs будет передаваться в функцию в виде именованных аргументов. При этом ключи станут именами параметров.
Нет необходимости использовать именно слово kwargs, это лишь общепринятый пример.
Это полезно, если вы создаете функцию, которая оперирует именованными аргументами, не определенными на стадии написания кода.
List comprehensions: Генераторы списков
Одна из самых удобных возможностей Python – это генераторы списков. Написанный с их помощью код выглядит очень чистым и легко читается, практически как обычный человеческий язык.
Если вы хотите узнать о генераторах больше, загляните сюда.
map: перебор коллекций
Существует много встроенных возможностей Python, предназначенных для программирования в функциональном стиле. Среди них метод map(), который в паре с лямбда-функциями творит чудеса.
Для каждого элемента коллекции x выполняется простая функция. Результатом работы метода map() является специальный объект, который легко конвертировать в любую итерируемую структуру, например, в список.
newspaper3k: все новости мира
Модуль newspaper позволяет получать новостные статьи из ведущих международных изданий. Доступны изображения, авторы и даже некоторые встроенные методы обработки естественного языка.
Так что если вы думали об использовании BeautifulSoup или какой-либо другой библиотеки вебскраппинга, не тратьте время и просто возьмите newspape.
Operator overloading: перегрузка операторов
Термин перегрузка операторов звучит так глубокомысленно, что произнося его, вы выглядите как настоящий ученый в области компьютерных наук. На самом же деле это очень простая концепция.
Например, вы думали о том, почему с помощью оператора + можно и складывать числа, и конкатенировать строки? Это живой пример перегрузки.
Можно создать объекты, которые по-своему интерпретируют обычные операторы языка.
pprint: красивая печать
Функция print отлично справляется со своей работой. Но если вы захотите вывести на печать какой-нибудь громоздкий многоуровневый объект, результат будет довольно уродливым.
На помощь спешит модуль pretty-print из стандартной библиотеки. Он предоставляет массу возможностей Python для тех, кто имеет дело с нетривиальными структурами и сложными объектами. Теперь все что угодно можно вывести в удобном для чтения формате.
Queue: реализация очередей
Python позволяет многопоточную разработку, а модуль Queue дает возможность создавать очереди. Это особые структуры данных, элементы которых добавляются и извлекаются по определенным правилам.
Например, FIFO-очереди (первый на вход – первый на выход) отдают элементы в том порядке, в котором они были добавлены. LIFO-очереди (последний на вход – первый на выход), наоборот, дают доступ к элементу, добавленному последним. И наконец, в приоритетных очередях значение имеет порядок сортировки.
Взгляните, как применяются очереди для многопоточного программирования.
__repr__: вывод в виде строки
Когда вы создаете собственный класс или объект, для него следует предоставить способ строкового вывода. Это может выглядеть примерно так:
Прежде всего это нужно для удобной отладки, поэтому не ленитесь добавлять вашим классам метод __repr__ . А если вам нужно красивое строковое представление для пользовательского интерфейса, пригодится метод __str__ .
sh: команды терминала прямо из кода
Порой применение стандартных библиотек os и subprocess превращается в головную боль для разработчика. Но есть удобная альтернатива – библиотека sh.
Она дает возможность вызвать программу, как если бы это была просто функция языка. Таким образом, можно автоматизировать процессы и задачи непосредственно из кода Python.
Type hints: указания типов
Типизация в Python динамическая, поэтому нам не нужно определять конкретные типы данных для переменных и параметров функций.
Да, это ускоряет процесс разработки, но нет ничего более раздражающего, чем ошибки типов, возникающие во время выполнения.
В современном стандарте Python появилась возможность добавлять определение типа на стадии разработки.
Для типов можно даже создавать псевдонимы:
Подобные аннотации необязательны, но они делают код проще, а также дают возможность использовать инструменты автоматического анализа для отлова случайных ошибок. Очень полезная вещь в больших проектах!
Одна из встроенных возможностей Python – генерация универсальных уникальных идентификаторов. За это отвечает модуль uuid.
Результат работы этого кода – одно из 2 122 возможных 128-битных чисел. Вероятность дублирования меньше, чем одна миллиардная доля – это совсем неплохо.
Virtual environments: виртуальные среды
Одна из самых полезных возможностей Python.
Часто бывает так, что два проекта используют одну и ту же зависимость, но в разных версиях. Что вы устанавливаете в этом случае?
Нет нужды делать сложный выбор, ведь Python поддерживает виртуальные среды.
На одном компьютере теперь может работать сразу несколько автономных версий языка.
wikipedia: мировые запасы информации к вашим услугам
Википедия имеет отличный API для программного доступа к огромному количеству информации, а модуль wikipedia позволяет с легкостью с ним взаимодействовать.
Как и сам сайт, модуль поддерживает несколько языков, позволяет случайно выбирать страницу и даже имеет метод donate() .
xkcd: комиксы
Язык получил свое название в честь комедийного шоу Монти Пайтона, поэтому у него неплохое чувство юмора. В документации множество отсылок к известным скетчам, но это еще не все. Просто запустите эту команду:
Ты прекрасен, Python!
YAML – это надмножество JSON, предназначенное для форматирования данных. Он отлично справляется со сложными объектами, поддерживает комментарии и даже способен обрабатывать циклические ссылки. В целом это идеальный выбор для создания файлов конфигурации.
Ряд возможностей для комбинации YAML и Python дает модуль PyYAML.
Просто инсталлируйте его:
и используйте в вашем проекте:
Теперь можно с удобством хранить данные любого типа.
zip: упаковка нескольких коллекций
Последняя, но не худшая, из букваря возможностей Python – функция zip() . Используйте ее, если необходимо объединить два списка в один словарь:
На вход метод принимает итерируемые объекты, на выходе получается список кортежей сгруппированных по индексу элементов.