Пять простых примеров, которые сподвигнут тебя изучить Python

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Python за последнее десятилетие набрал огромную популярность и не сдает своих позиций — его применение и для обучения программированию, и для разработки приложений только растет. Не каждый язык может похвастаться популярностью в таких разных отраслях, как веб-разработка, DevOps, научные вычисления и машинное обучение.

Языки становятся популярными по разным причинам, иногда просто из-за отсутствия других решений для определенной ниши. Успех Python, на мой взгляд, вполне заслужен — его легко изучать, приятно использовать, и на нем можно начать писать полезные программы довольно скоро.

В чем секрет его успеха? У него простой в изучении, логичный и лаконичный синтаксис. Многие языки полны сюрпризов вроде легендарного print reverse "foo", который вопреки ожиданиям выводит строку foo (правильный вариант: print scalar reverse "foo").

В Python смысл выражений почти всегда очевиден, а все ошибки сопровождаются исключениями, из которых легко понять, что пошло не так. Например, если мы попытаемся записать в массив по несуществующему индексу, то сразу получим ошибку с исчерпывающим описанием проблемы.

>>> arr = [1,2] >>> arr[5] = 3 Traceback (most recent call last):   File "<stdin>", line 1, in <module> IndexError: list assignment index out of range 

Например, в Ruby или Lua аналогичный код приведет массив к виду [1, 2, nil, nil, nil, 3]. И, если это не то, чего ты ожидал, то заметить и исправить ошибку может быть непросто.

При выборе языка для нового проекта нужно учитывать не только свойства самого языка, но и его экосистему: библиотеки, инструменты разработки, да и сообщество пользователей. С этим у Python все отлично. Его поддерживают многие популярные IDE, а некоторые среды даже разработаны специально для него, как PyCharm. Есть множество инструментов анализа и отладки, например, py-spy — профайлер, которым можно подключиться к работающей программе и в реальном времени смотреть, какие функции выполняются и сколько времени занимают.

Число библиотек для самых разных целей тоже огромно. Некоторые из них стали настолько популярны, как TensorFlow, pandas, или NumPy, что люди используют Python для машинного обучения и анализа данных специально, чтобы ими воспользоваться. В DevOps не менее популярны Ansible и Saltstack.

В сочетании с неплохой производительностью, это позволяет применять Python как для коротких скриптов и разовых задач, так и для больших приложений. Как и любой другой язык, Python не универсален и не всегда является лучшим выбором для конкретной задачи, но он покрывает достаточно большой класс задач и требований к производительности, чтобы для многих проектов быть основным или единственным языков. При недостатке производительности подмножество Python можно компилировать в машинный код с помощью Cython, или переписать на другом языке и взаимодействовать с ним через FFI.

Самое главное: с помощью нужных библиотек, решать многие задачи просто. Даже для начинающего разработчика Python быстро станет помощником в повседневных задачах. Именно поэтому его часто выбирают для изучения в качестве первого языка, и существует множество курсов, где с этим помогают — например, в онлайн школе SkillFactory.

INFO

Школа SkillFactory — спонсор этой публикации. Со SkillFactory ты можешь пройти курс «Python для веб-разработки» и освоить полный стек технологий для создания сайтов, приложений и сервисов. Для студентов предусмотрена помощь наставника; в процессе обучения студент формирует портфолио, которое потом сможет показать работодателю.

Чтобы продемонстрировать мощь Python, я выбрал ряд библиотек, которые не требуют сложной установки зависимостей или наборов данных, и позволяют сделать что-то полезное всего за несколько строк кода.

Виртуальные окружения

Для разработки и тестирования пользователи Python часто применяют виртуальные окружения (virtual environments). В Python 2.x их поддержка была реализована опциональным модулем, но в Python3 уже есть встроенная поддержка, так что для их установки ничего делать не нужно.

Каждое окружение живет в своем каталоге, поэтому устанавливать в него модули можно от имени обычного пользователя. Если ты необратимо сломал свое окружение, можно просто удалить каталог и пересоздать его. Не менее полезно бывает создать чистое окружение чтобы убедиться, что твоя библиотека или приложение чисто устанавливается из исходников и работает.

Создать и активировать виртуальное окружение очень просто. На UNIX-подобных системах это делается так:

$ python3 -m venv test-env $ source ./test-env/bin/activate 

Выйти из окружения можно командой deactivate.

Чтобы не засорять рабочую систему лишними модулями, все примеры лучше пробовать именно в виртуальном окружении.

Замена скриптов на shell

Скрипты на Bourne shell — классика системного администрирования и автоматизации, но как язык программирования, шелл так и остался в семидесятых. Его собственные средства отладки и обработки ошибок примитивны, к тому же, если ты хочешь сделать скрипт кроссплатформенным, нужно тщательно избегать «башизмов» и всего, что не входит в стандарт POSIX. Инструменты вроде ShellCheck могут с этим помочь, но можно пойти и другим путем — не использовать Shell вовсе.

В стандартной библиотеке Python уже есть ряд модулей, которые сделают за тебя половину работы. К примеру, скопировать файл с помощью функции из модуля shutil можно в одну строку.

$ touch myfile $ python3 >>>import shutil >>>shutil.copy('myfile', 'myfile.bak') >>>exit() 

Там же присутствуют chown, rmtree и функции для упаковки файлов в архивы, кроме того, у функций есть опция follow_symlinks.

Выполнить команду и получить ее код завершения и вывод ничуть не сложнее.

>>> import subprocess >>> subprocess.run(["ls -l /dev/null"], shell=True, capture_output=True) CompletedProcess(args=['ls -l /dev/null'], returncode=0, stdout=b'crw-rw-rw-. 1 root root 1, 3 Feb  9 01:36 /dev/null ', stderr=b'') 

Иногда бывает сложно обойтись без передачи пользовательского ввода внешней команде. Это открывает простор для уязвимостей типа shell injection и требует внимания к деталям. К счастью, в стандартной библиотеке уже есть функция, которая добавит кавычки и экранирует опасные символы.

>>>import shlex >>> shlex.quote("myfile; rm -rf ~") "'myfile; rm -rf ~'" 

Разбор веб-страниц

Разбор веб-страниц (scraping) нужен для многих целей: от борьбы с сервисами, которые не предоставляют API, до создания поисковых систем.

Для демонстрации мы извлечем заголовки новостей с главной страницы журнала. C помощью библиотеки requests и парсера HTML BeautifulSoup мы можем сделать это всего в несколько строк.

Установим библиотеки: pip3 install requests beautifulsoup4. Теперь откроем xakep.ru в отладчике браузера и увидим, что заголовки новостей находятся в тэгах <h3 class="entry-title">, но не напрямую, а во вложенных <a> и <span>. К счастью для нас, BeautifulSoup поддерживает селекторы CSS3, а в ее стандарте tag1 tag2 как раз означает «<tag2> вложенный в <tag1>. То есть, наш селектор для заголовков новостей будет h3.entry-title a span.

import requests from bs4 import BeautifulSoup  response = requests.get("https://xakep.ru") page = response.text  soup = BeautifulSoup(page, 'html.parser')  headings = map(lambda e: e.text, soup.select("h3.entry-title a span")) for h in headings:   print(h) 

Сохрани в файл вроде xakep-headings.py и выполни python3 xakep-headings.py или просто скопируй в интерпретатор, и ты увидешь все свежие новости.

Веб-приложения

На Python есть большие фреймворки MVC, такие как весьма популярный Django. Но есть и легковесные библиотеки, с которыми можно за пару строк кода превратить любую функцию в веб-сервис.

Один из самых популярных микрофреймворков — Flask. Для демонстрации напишем сервис, который в ответ на запрос /add/x/y выдает сумму чисел x и y.

Установим Flask командой pip3 install flask и сохраним вот этот код в файл myapp.py:

from flask import Flask, escape, request  app = Flask(__name__)  @app.route('/add/<int:x>/<int:y>') def show_post(x, y):     return str(x + y) 

Теперь можно запустить его командой env FLASK_APP=myapp.py flask run.

$ curl http://localhost:5000/add/3/2 5 

Если тебе не понравился Flask, можно вместо него посмотреть на Bottle — он ничуть не сложнее в использовании.

Обработка естественного языка

Обработка естественного языка традиционно считается сложной и специализированной задачей. Библиотеки для этой цели весьма развиты, но не слишком просты в использовании.

Однако, модуль TextBlob предоставляет простой интерфейс к библиотеке NLTK. Перед использованием нам нужно поставить саму библиотеку и скачать наборы данных для нее:

$ pip3 install textblob  $ python3 >>> import nltk >>> nltk.download('punkt') >>> nltk.download('brown') 

Теперь попробуем написать функцию, которая возвращает существительное во множественном числе.

from textblob import TextBlob  def pluralize(word, count):     if count == 1:         return word     else:         blob = TextBlob(word)         return blob.words[0].pluralize()  print(pluralize('mouse', 1)) print(pluralize('mouse', 9)) 

Скопируй это все в интерпретатор и попробуй в действии.

Так же просто разбить текст на предложения:

>>> text = TextBlob("Python is a cool language. I like using it.") >>> text.sentences [Sentence("Python is a cool language."), Sentence("I like using it.")] 

В TextBlob есть много других возможностей, например, разбор на члены предложения — очень пригодится, если хочешь написать текстовый квест или чат-бота.

Заключение

Это всего несколько примеров, но репозиторий пакетов PyPI огромен и каждый найдет там что-то для себя. Когда ты только изучаешь язык, нет ничего плохого в том, чтобы написать свое решение давно решенной задачи. Но вот если тебе нужно быстрое решение насущной задачи вроде работы с каким-нибудь форматом файла или взаимодействия с сервисом, не забудь поискать в репозитории — скорее всего оно там уже есть.


Источник: xakep.ru

Комментарии: