26 полезных приёмов и хитростей Python |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-09-06 19:54 Python — один из самых популярных и востребованных языков программирования. На это есть несколько причин:
В процессе работы с Python каждый находит для себя какие-то полезные модули и приёмы. В этой подборке вы узнаете о некоторых полезных хитростях. all и any Одна из многих причин популярности Python — его читабельность и выразительность. Часто шутят, что Python — это «исполняемый псевдокод». Однако когда вы можете писать код таким образом, становится сложно не согласиться: x = [True, True, False] if any(x): print("Как минимум один True") if all(x): print("Ни одного False") if any(x) and not all(x): print("Как минимум один True и один False") bashplotlib Хотите строить графики в консоли? $ pip install bashplotlib Стройте на здоровье. collections В Python есть классные встроенные типы данных, но порой они ведут себя не совсем так, как хотелось бы. К счастью, во встроенной библиотеке Python есть модуль collections с удобными дополнительными типами данных: from collections import OrderedDict, Counter # Запоминает порядок добавления ключей x = OrderedDict(a=1, b=2, c=3) # Считает частоту каждого символа y = Counter("Hello World!") dir Когда-нибудь задумывались о том, как заглянуть внутрь объекта в Python и посмотреть на его атрибуты? Конечно, задумывались. Используем командную строку: >>> dir() >>> dir("Hello World") >>> dir(dir) Это может пригодиться при интерактивной сессии в Python, а также для динамического изучения объектов и модулей, с которыми вы работаете. Больше можно узнать в официальной документации. emoji Да, серьёзно. $ pip install emoji И не делайте вид, что не хотите попробовать: from emoji import emojize print(emojize(":thumbs_up:")) ? from __future__ import Одним из последствий популярности Python является то, что постоянно разрабатываются и выходят новые версии. Новые версии — новые возможности, но только не для вас, если вы пользуетесь устаревшей. Впрочем, не всё так плохо. Модуль __future__ даёт возможность импортировать функциональность будущих версий Python. Это прямо как путешествие во времени, или магия: from __future__ import print_function print("Hello World!") Почему бы не попробовать импортировать фигурные скобки? geopy Программистам может быть сложно ориентироваться в географии. Однако модуль geopyвсё упрощает: $ pip install geopy Он работает путём абстрагирования API разных сервисов геокодирования. Этот модуль даёт возможность узнать полный адрес места, его долготу и широту и даже высоту. Также в нём есть полезный класс from geopy import GoogleV3 place = "221b Baker Street, London" location = GoogleV3().geocode(place) print(location.address) print(location.location) howdoi Зависли над какой-то проблемой и не можете вспомнить её решение? Нужно зайти на StackOverflow, но не хочется покидать терминал? Тогда вам не обойтись без этого инструмента командной строки: $ pip install howdoi Задайте любой вопрос, и он постарается найти ответ на него: $ howdoi vertical align css $ howdoi for loop in java $ howdoi undo commits in git $ howdoi vertical align css Но будьте осторожны: он извлекает код из топовых ответов на StackOverflow и не всегда даёт полезную информацию: $ howdoi exit vim inspect Модуль inspect пригодится для понимания того, что происходит за кулисами в Python. Вы даже можете вызывать его методы на них самих! Ниже используется метод Последняя команда выводит номер строки, на которой она сама находится: import inspect print(inspect.getsource(inspect.getsource)) print(inspect.getmodule(inspect.getmodule)) print(inspect.currentframe().f_lineno) Конечно, кроме таких банальных применений этот модуль может оказаться полезным для понимания того, что делает ваш код. Также вы можете использовать его, чтобы писать самодокументированный код. Jedi Библиотека Jedi предназначена для автодополнения и анализа кода. Она ускоряет процесс написания кода и делает его более продуктивным. Если вы не разрабатываете свою IDE, то вам, наверное, будет более интересно использовать Jedi в качестве расширения редактора. К счастью, уже есть много вариантов. Возможно, вы уже встречались с Jedi — IPython использует эту библиотеку для автодополнения. **kwargs Когда изучаешь любой язык, на пути встречается множество краеугольных камней. В случае с Python понимание таинственного синтаксиса Две звёздочки впереди объекта словаря дают возможность передавать в функцию содержимое этого словаря как именованные аргументы. Ключи словаря — это имена аргументов, а значения передаются в функцию. Вам даже не обязательно называть его dictionary = {"a": 1, "b": 2} def some_function(a, b): print(a + b) return # оба варианта делают одно и то же: some_function(**dictionary) some_function(a=1, b=2) Это полезно в тех случаях, когда ваши функции должны обрабатывать именованные аргументы, не определённые заранее. Прим.перев. Также это может пригодиться при написании функций-обёрток, которые передают все аргументы другой функции. Генераторы списков Ещё одна классная особенность Python, дающая возможность быстро создавать списки. Такие выражения позволяют легко писать чистый код, который читается почти как естественный язык: numbers = [1, 2, 3, 4, 5, 6, 7] evens = [x for x in numbers if x % 2 == 0] odds = [y for y in numbers if y not in evens] cities = ['Лондон', 'Москва', 'Берлин'] def visit(city): print("Добро пожаловать в", city) for city in cities: visit(city) map У Python есть хорошая встроенная поддержка функционального программирования. Одной из самых полезных возможностей является функция x = [1, 2, 3] y = map(lambda x: x + 1 , x) # выводит [2, 3, 4] print(list(y)) Здесь newspaper3k Если вы ещё с ним не встречались, то приготовьтесь к тому, что модуль newspaperснесёт вам крышу. Он даёт возможность извлекать статьи и связанные мета-данные из множества разных источников. Можно извлечь изображения, текст и имена авторов. В нём даже есть встроенная NLP-функциональность. Поэтому, если вы собирались использовать BeautifulSoup или другую библиотеку для вебскрапинга в своём следующем проекте, лучше сэкономьте своё время и силы и установите newspaper: $ pip install newspaper3k Перегрузка операторов В Python есть поддержка перегрузки операторов — одной из тех штук, о которых говорят все настоящие computer-scientis’ы. На самом деле идея проста. Когда-нибудь задумывались, почему Python позволяет использовать оператор Вы можете определять объекты, которые используют стандартные символы операторов любым образом. Это позволяет применять их в контексте объектов, с которыми вы работаете: class Thing: def __init__(self, value): self.__value = value # Переопределяем оператор > def __gt__(self, other): return self.__value > other.__value # Переопределяем оператор < def __lt__(self, other): return self.__value < other.__value something = Thing(100) nothing = Thing(0) # True something > nothing # False something < nothing # Error something + nothing pprint Стандартная функция Python Здесь на помощь приходит модуль из стандартной библиотеки pprint (pretty print). С его помощью можно выводить объекты со сложной структурой в читабельном виде. Мастхэв для любого Python-разработчика, работающего с нестандартными структурами данных: import requests import pprint url = 'https://randomuser.me/api/?results=1' users = requests.get(url).json() pprint.pprint(users) Queue Python поддерживает многопоточность, в использовании которой помогает стандартный модуль Queue. Он позволяет реализовывать такую структуру данных, как очередь. Очереди позволяют добавлять и извлекать элементы согласно определённому правилу. Очереди «первым пришёл — первым ушёл» («first in, first out», FIFO) позволяют извлекать объекты в порядке их добавления. Из очередей «последним пришёл — первым ушёл» («last in, first out», LIFO) можно извлекать последние добавленные объекты. Наконец, приоритетные очереди позволяют извлекать объекты согласно порядку их сортировки. Здесь можно посмотреть на пример использования очередей в многопоточном программировании на Python. __repr__ При определении класса или объекта полезно добавлять «официальный» способ представления объекта строкой. Например: >>> file = open('file.txt', 'r') >>> print(file) <open file 'file.txt', mode 'r' at 0x10d30aaf0> Это сильно упрощает отладку. Вот всё, что вам нужно сделать: class SomeClass: def __repr__(self): return "<какое-то описание>" some_instance = SomeClass() # выводит <какое-то описание> print(some_instance) Прим.перев. Метод sh Python — отличный скриптовый язык. Но иногда стандартные библиотеки os и subprocess вызывают только головную боль. Библиотека sh может стать приятной альтернативой. Она позволяет вызывать любую программу как обычную функцию, что полезно для автоматизации различных задач исключительно с помощью Python: import sh sh.pwd() sh.mkdir('new_folder') sh.touch('new_file.txt') sh.whoami() sh.echo('This is great!') Прим.перев. Библиотека sh поддерживает только платформы Linux и macOS; для работы на Windows вам придётся поискать другой инструмент. Аннотации типов Python — динамически типизированный язык. Вам не нужно указывать тип данных при определении переменных, функций, классов и т.д. Это позволяет ускорить процесс разработки. Однако мало что раздражает так сильно, как ошибка времени выполнения, возникшая из-за простого несовпадения типа. С версии Python 3.5 при определении функции можно добавлять аннотации типов: def add_two(x: Int) -> Int: return x + 2 Можно даже определять псевдонимы типов: from typing import List Vector = List[float] Matrix = List[Vector] def add_matrix(a: Matrix, b: Matrix) -> Matrix: result = [] for i, row in enumerate(a): result_row = [] for j, col in enumerate(row): result_row += [a[i][j] + b[i][j]] result += [result_row] return result x = [[1.0, 0.0], [0.0, 1.0]] y = [[2.0, 1.0], [0.0, -2.0]] z = add_matrix(x, y) Хотя их использование опционально, с помощью аннотаций типов код можно сделать более понятным. Также они позволяют использовать инструменты для проверки типов, чтобы отлавливать ошибки TypeError. uuid Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier, глобально уникальный идентификатор). import uuid user_id = uuid.uuid4() print(user_id) Так мы создаём случайное 128-битное число, которое почти наверняка будет уникальным. Существует более 2??? возможных UUID. Это более 5 ундециллионов или 5,000,000,000,000,000,000,000,000,000,000,000,000. Вероятность нахождения дубликатов в заданном наборе крайне мала. Даже при наличии триллиона UUID вероятность того, что среди них есть дубликат, гораздо меньше, чем один к миллиарду. Вполне недурно для двух строк кода. Виртуальные среды Часто Python-программисты работают над несколькими проектами одновременно. К сожалению, порой два проекта зависят от разных версий одной зависимости. Какую же установить? К счастью, в Python есть поддержка виртуальных сред, которые позволяют взять лучшее от двух миров. В командной строке нужно ввести: $ python3 -m venv my-project $ source my-project/bin/activate $ pip install all-the-modules Теперь вы можете иметь разные независимые версии Python на одной машине. wikipedia У Wikipedia есть классное API, которое позволяет получить доступ к непревзойдённому источнику полностью бесплатной информации. Модуль wikipedia делает доступ к этому API чуть ли чрезмерно удобным: import wikipedia result = wikipedia.page('freeCodeCamp') print(result.summary) for link in result.links: print(link) Как и настоящий сайт, модуль предоставляет поддержку многих языков, разрешение многозначности страниц, получение случайной страницы и даже метод xkcd Юмор — ключевая особенность Python. В конце концов, язык был назван в честь британского комедийного шоу «Летающий цирк Монти Пайтона». Во многих местах официальной документации можно найти отсылки к самым известным эпизодам шоу. Конечно, чувство юмора не заканчивается на документации. Попробуйте ввести следующую строку: import antigravity Оставайся собой, Python. Оставайся собой. YAML YAML означает «YAML — не язык разметки» («YAML Ain’t Markup Language»). Это язык форматирования данных, являющийся надмножеством JSON. В отличие от JSON, YAML может хранить более сложные объекты и ссылаться на собственные элементы. Также там можно писать комментарии, что делает YAML подходящим для конфигурационных файлов. Модуль PyYAML позволяет использовать YAML в Python. Установить можно так: $ pip install pyyaml А затем импортировать: import yaml PyYAML позволяет хранить любые Python-объекты и экземпляры любых пользовательских классов. zip Напоследок ещё одна клёвая штука. Когда-нибудь возникала необходимость создать словарь из двух списков? keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) Встроенная функция Можно провести операцию, обратную А какие приёмы или полезные библиотеки знаете вы? Делитесь в комментариях. Источник: tproger.ru Комментарии: |
|