Python — это один из самых популярных и востребованных языков программирования в мире. И на то есть множество причин:
· прост в изучении;
· мега-универсальный;
· огромное разнообразие модулей и библиотек.
Я пользуюсь Python ежедневно — это неотъемлемая часть моей работы в качестве специалиста по исследованию данных. За время своей трудовой деятельности я открыл для себя несколько полезных хитростей и трюков.
В данной статье я постарался структурировать их в алфавитном порядке.
С большей частью всего этого я сам сталкивался или пользовался в работе. Что-то было найдено в документации стандартных библиотек Python. А некоторые вещи нашлись в PyPi.
Еще должен отметить то, что четыре или пять приемов я встретил на awesome-python.com. Это специально отобранный список сотен самых интересных инструментов и модулей для Python. Очень даже вдохновляет при просмотре!
all или any
Одна из причин популярности Python кроется в его читабельности и выразительности.
Часто можно слышать, как Python в шутку называют ‘исполняемым псевдокодом’. А ведь и правда: если написать код вот так, то поспорить с этим будет достаточно сложно:
bashplotlib
Хотите построить графики в консоли?
$ pip install bashplotlib
Теперь они у вас есть.
collections
В Python есть отличные встроенные типы данных, но иногда они ведут себя не так, как вам бы хотелось.
К счастью, в стандартной библиотеке Python присутствует модуль collections. Это полезное дополнение предлагает расширенные типы данных.
dir
Интересовались ли вы когда-нибудь тем, как можно заглянуть внутрь Python объекта и увидеть все его атрибуты? Конечно же, да.
Из командной строки:
Функция эта крайне полезна при запуске Python в интерактивном режиме или работе с динамическими объектами и модулями.
Подробнее можно почитать здесь.
эмодзи
Да, они самые.
$ pip install emoji
Не притворяйтесь, будто не попробуете повторить…
from emoji import emojize
print(emojize(":thumbs_up:"))
?
импорт из __future__
Одно из следствий популярности Python — постоянная разработка следующих версий. Новые версии несут в себе новые функции, если, конечно, ваша версия не устаревшая.
Бояться здесь нечего. Модуль_future_ позволяет импортировать в Python функционал будущих версий. Без всяких преувеличений, перед вами — настоящее путешествие во времени или магия.
Почему бы не попробовать импортировать фигурные скобки?
geopy
География бывает крайне загадочной средой для программистов (ха, вот так каламбур!). Но с модулем geopy все становится на удивление просто.
$ pip install geopy
Его работа заключается в абстрагировании API-интерфейсов различных сервисов геокодирования, что позволяет вам получать доступ к полному адресу нужного места, его широте, долготе и даже высоте.
Существует и другой полезный класс — distance. Он определяет расстояние между двумя точками в ваших любимых единицах измерения.
howdoi
Застряли на какой-то проблеме с кодом и не можете вспомнить нужное решение? Хотите зайти в StackOverflow, но не хотите выходить из терминала?
Тогда вам точно пригодится вот этот инструмент для командной строки.
$ pip install howdoi
Задайте ему любой вопрос, и он постарается выдать нужный ответ.
Однако будьте внимательны: howdoi выдирает код из самых популярных ответов StackOverflow.Поэтому не всегда выдает самую полезную информацию…
$ howdoi exit vim
inspect
Модуль inspect идеален для понимания общего «закулисья» Python. А еще вы можете вызывать его методы!
Пример кода ниже использует inspect.getsource() для вывода собственного номера строки. А inspect.getmodule() используется для печати модуля, в котором он был определен.
Последняя строка кода выводит собственный номер строки.
Разумеется, кроме столь банальных примеров, модуль inspect будет полезен для понимания всего происходящего с кодом. Или же выбирайте его для написания самодокументированного кода.
Jedi
Jedi — это библиотека для autocomplete и анализа кода. С ней процесс написания кода станет быстрее и эффективнее.
Ну, а если вы не разрабатываете собственную среду IDE, то вы можете использовать Jedi в качестве плагина редактирования. К счастью, все это уже доступно для скачивания!
Быть может, вы уже пользуетесь Jedi. Проект IPython использует функционал Jedi для автодополнения кода.
**kwargs
Изучение любого языка складывается из ряда этапов. В Python одним из таких этапов можно назвать понимание загадочного синтаксиса **kwargs.
Двойная звездочка перед словарным объектом позволяет передавать содержимое этого словаря в качестве именованных аргументов функции.
Ключи словаря — это имена аргумента, а значения превращаются в значения, передаваемые в функцию. Вам даже не придется называть ее kwargs!
Такой прием крайне полезен при написании функций, которые смогут обрабатывать именованные аргументы, не определенные заранее.
Генераторы списков
Моя одна из любимых вещей в программировании на Python — это генератор списков.
Данные выражения позволяют без особых трудов писать очень чистый код, который читается с той же легкостью, что и естественный язык.
Подробнее почитать про использование генераторов списков можно здесь.
map
Python поддерживает функциональное программирование с помощью ряда встроенных опций. И самой полезной из них является функция map(), особенно в сочетании с лямбда-функциями.
В примере выше map()применяет простую лямбда-функцию к каждому элементу вx. Она возвращает объект map, который можно преобразовать в итерированный объект (например, в список или кортеж).
newspaper3k
Если вы никогда не видели этого ранее, то готовьтесь к тотальному выносу мозга с модулем newspaper в Python.
Он может доставать новостные статьи и связанные с ними мета-данные из ряда ведущих международных изданий. Извлекать можно картинки, текст и имена авторов.
В модуле присутствует даже встроенный функционал обработки естественного языка (NLP).
Если вдруг в своем следующем проекте вы подумывали прибегнуть к помощи BeautifulSoup или любой другой DIY webscraping-библиотеки, то не тратьте зря время и силы, и смело берите $ pip install newspaper3k .
Перезагрузка оператора
Python поддерживает перезагрузку оператора. Зная эти слова, вы сразу кажитесь настоящим компьютерным гением.
На самом деле, концепция довольно проста. Вы когда-нибудь задавались вопросом, почему в Python можно использовать оператор + для добавления чисел и конкатенации строк? Это и есть перезагрузка оператора в чистом виде.
Вы можете определить объекты, которые будут пользоваться стандартными символами операторов Python по-своему. Тогда их можно будет использовать в зависимости от содержимого объектов, с которыми вы работаете.
pprint
Стандартная функцияprint в Python знает свое дело. Но попробуйте вывести на печать крупный и вложенный объект, и вас ждет сплошное разочарование.
Вот здесь-то и приходит на помощь модуль pretty-print из стандартной библиотеки. Он выводит сложно-структурированные объекты в удобочитаемом виде.
Настоящий must-have для любого Python-разработчика, имеющего дело с нетривиальными структурами данных.
Очередь
В Python предусмотрена поддержка мультизадачности. Это делается через модуль стандартной библиотеки Queue.
Этот модуль реализует работу со структурой данных «очередь». Такая структура позволяет добавлять и извлекать записи по определенному правилу.
В очереди «Первым пришел — первым ушел» (или FIFO) можно извлекать объекты в порядке их добавления. Метод «Последним пришел — первым ушел» сначала открывает доступ к недавно добавленным объектам.
И, наконец, очередь с приоритетом позволяет извлекать объекты в соответствие с порядком их сортировки.
Вот пример использования очередей для многопоточного программирования в Python.
__repr__
При определении класса или объекта в Python лучше снабжать его «официальным» представлением в виде строки. Например:
Это значительно упрощает отладку кода. Добавляйте синтаксис к определению класса следующим образом:
sh
Python — это отличный скриптовый язык. Иногда использование стандартных библиотек os и subprocess становится настоящей головной болью.
А библиотека sh является отличной альтернативой.
С ней вы сможете вызывать любую программу как обычную функцию — это крайне полезно для автоматизации рабочего процесса и задач, причем все делается в самом Python.
Подсказки типа
Python — это язык с динамической типизацией. Вам не нужно указывать тип данных при определении переменных, функций, классов и т.д.
Такой прием сокращает время разработки. Однако есть и более страшные вещи, чем ошибка при выполнении, вызванная простой проблемой ввода.
Начиная с Python 3.5, при определении функций вы можете указывать подсказки типа.
А также задавать псевдонимы типа:
Аннотации типа (хоть они и не обязательны) могут облегчить читаемость кода.
К тому же, в них предусмотрены средства проверки типов, чтобы успевать «отлавливать» пресловутые TypeErrors до момента выполнения. Очень дельная штука, особенно при работе над крупными и сложными проектами!
uuid
Простой и быстрый способ генерирования Универсальных уникальных идентификаторов (или UUIDs) — это использование модуля uuid из стандартной библиотеки Python.
Данный модуль создает произвольное 128-битное число, которое почти наверняка окажется уникальным.
К слову сказать, сгенерировать можно свыше 2¹²² UUID. Это более пяти ундециллионов (или 5,000,000,000,000,000,000,000,000,000,000,000,000).
Вероятность повтора комбинации в данном диапазоне ничтожно мала. Даже при триллионе UUID вероятность появления дубля существующего значения намного меньше, чем один к миллиарду.
Очень круто для двух строчек кода.
Виртуальные среды
Эта часть — моя самая любимая в Python.
Возможно, вы работаете сразу над несколькими проектами на Python. К сожалению, иногда два проекта привязаны к разным версиям одной и той же зависимости. Так какую же тогда установить?
К счастью, поддержка виртуальных сред в Python помогает вам получить все и сразу. Из командной строки:
Теперь у вас есть автономные версии и установщики Python, работающие на одной машине. Проблема решена!
wikipedia
В Wikipedia предусмотрен отличный интерфейс, дающий пользователям программируемый доступ к кладези совершенно бесплатных знаний и информации.
Модуль wikipedia делает доступ к этому API до безобразия удобным.
Как и на настоящем сайте, в модуле предусмотрена поддержка мультиязычности, неоднозначности страниц, случайной выборки страниц, и даже присутствует метод donate().
xkcd
Юмор — это визитная карточка языка Python. В конце концов, его и назвали в честь британского комедийного скетча Монти Пайтон: Летающий цирк. Львиная доля официальной документации по Python имеет отсылки к самым известным скетчам шоу.
Но чувство юмора не ограничивается одной лишь документацией. Попробуйте запустить строку ниже:
import antigravity
Никогда не меняйся, Python. Оставайся таким же.
YAML
YAML расшифровывается как YAML — не язык разметки. Это язык форматирования данных, который является расширенной версией JSON.
Но в отличие от JSON он может хранить более сложные объекты и ссылаться на собственные элементы. А еще вы можете писать комментарии, что отлично подходит для создания файлов конфигурации.
Модуль РyYAML позволяет использовать YAML вместе с Python. Установите его вот так:
$ pip install pyyaml
А затем импортируйте в свои проекты:
import yaml
PyYAML позволяет хранить объекты Python всех типов данных и экземпляры любых пользовательских классов.
zip
Последняя и очень классная премудрость в вашей копилке. Приходилось ли вам когда-либо создавать словарь из двух списков?
Встроенная функция zip() берет несколько итерируемых объектов и возвращает список кортежей. Каждый кортеж группирует элементы входных объектов по их позиционному индексу.
Вы можете даже «распаковать» объекты, вызвав *zip().
Читайте нас в телеграмме и vk
Перевод статьи Peter Gleeson: An A-Z of useful Python tricks