Введение в Python 2. Python среди других языков программирования python
Скачать 483.28 Kb.
|
PYTHON СРЕДИ ДРУГИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Python — это высокоуровневыйинтерпретируемый кроссплатформенный язык программирования. Сколько слов вам понятно в этой фразе? В этом юните шаг за шагом мы разберём все понятия из этого= определения. Почему это важно знать? Кто-то из вас уже знает основы программирования, а кто-то только начинает свой путь. В любом случае нам важно или освежить знания, или познакомиться с этими понятиями. Часть из этой информации вам понадобится при дальнейшем изучении курса и в работе, а часть поможет повысить общую эрудицию в программировании, и вам будет понятно, о чём говорят ваши коллеги и другие программисты. Начнём с определения термина «язык программирования». Язык программирования — это строго определённый набор правил, благодаря которому возможно взаимодействие человека с компьютером. Язык программирования — это инструмент, с помощью которого вы можете управлять компьютером. Все программы, все операции, которые выполняют компьютеры, — результат следования инструкциям, которые для компьютеров пишут люди. Представьте, что общаетесь с иностранцем, который не знает вашего языка, но вы знаете его язык. Компьютер и есть наш «иностранец». Люди придумали много языков для общения с компьютером. Это было сделано по разным причинам: ✔️ Иногда нам очень важна скорость работы программы, и тогда инструкцию компьютеру надо давать на максимально понятном для него языке, чтобы не тратить время на перевод. ✔️ Иногда нам важнее, чтобы человек быстрее писал программы, и мы готовы уступить в скорости выполнения программы в пользу скорости написания. По этому критерию языки программирования разделяются на две категории: высокоуровневые и низкоуровневые.
Пришло время разобраться, что означают понятия интерпретируемый и кроссплатформенный в определении языка Python. Эти понятия тесно связаны друг с другом. Разработчики постоянно оперируют понятиями компилятор и интерпретатор — вы можете встретить их упоминание в документации, книгах, в курсе и в общении с коллегами. Начинающим разработчикам важно разобраться с тем, что стоит за этими терминами, поскольку компиляция и интерпретация являются одними из основных понятий в мире языков программирования. Начнём погружение в эту тему с понятия, которое мы часто будем упоминать при объяснении механизмов работы трансляторов — машинный код. Машинный код (ещё его называют машинный язык) — это набор команд, которые непосредственно выполняются центральным процессором компьютера. Можно сказать, что машинный код, с одной стороны, представляет собой самое низкоуровневое представление компьютерной программы, и в то же время его можно рассматривать как упрощённый и аппаратно-зависимый (то есть зависящий от конкретной аппаратной части) язык программирования. Сейчас мало кто пишет программы напрямую в машинном коде, хотя раньше он был практически единственным инструментом программиста. С появлением языков высокого уровня необходимость писать программы в машинном коде отпала. К тому же это достаточно непросто и часто приводит к ошибкам, поскольку разработчику при написании программ необходимо управлять отдельными битами и вычислять числовые адреса и константы вручную. Для того чтобы программистам не было нужды погружаться в изучение и работу с машинным языком, а можно было работать исключительно с языками высокого уровня, были разработаны особые виды программ — трансляторы. Транслятор — программа, которая выполняет преобразование программы, написанной на одном из высокоуровневых языков программирования, в программу, состоящую из машинных команд. Язык, на котором написана входная программа, называется исходным языком, а сама входная программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом. Можно сказать, что трансляторы — это переводчики программ с языков высокого уровня на машинный язык, с которым может работать процессор. Существует две разновидности трансляторов: компиляторы и интерпретаторы. И, соответственно, языки программирования, использующие тот или иной подход к исполнению программ, называются компилируемыми или интерпретируемыми. КОМПИЛЯТОР Компилятор выполняет преобразование (компиляцию) программы, написанной на языке высокого уровня (исходный язык), в машинный код. Затем этот код записывается в исполняемый файл (например, .exe-файл), который уже может быть запущен как и любая другая обычная программа на вашем компьютере. Компиляция выполняется единожды, а исполняемый файл (программа) может использоваться в системе, под которую была выполнена компиляция, сколько угодно раз. Однако, если потребуется внести изменения в исходный код, это потребует и повторной компиляции, а процесс компиляции достаточно медленный. ИНТЕРПРЕТАТОР Интерпретатор напрямую выполняет текст кода без предварительного его преобразования в машинный код. Программа всегда остаётся на исходном языке и не может быть запущена на выполнение без использования интерпретатора. Каждая строка исходного кода переводится в машинный код за один проход интерпретатора. В данном случае программа в машинном коде существует только во время интерпретации и не сохраняется в виде отдельного файла. Схематично работу компилятора и интерпретатора можно изобразить так: ДОСТОИНСТВА И НЕДОСТАТКИ КОМПИЛИРУЕМЫХ И ИНТЕРПРЕТИРУЕМЫХ ЯЗЫКОВ
Разберём ещё одно важное понятие из мира языков программирования — синтаксис языка программирования. Синтаксис языка программирования — это набор правил, на основе которых строится программа. → Если проводить аналогию с русским языком, синтаксис — это правила орфографии и пунктуации. В языке программирования есть строго определённый набор ключевых слов, которые описывают команды для компьютера. В этих словах важен каждый символ: любое несоответствие или неоднозначность в вашем коде вызовет ошибку. → Кроме того, важна и структура кода, который вы пишите, — это можно сравнить с логичностью повествования. Например, если мы рассказываем соседу о том, как нам удалось вырастить сад на нашем садовом участке, и говорим, что сначала дерево выросло, а потом мы посадили семечко, то воспроизведение таких действий будет лишено всякого смысла и не может быть выполнено нашим соседом. С программами аналогично: если будет нарушена структура кода, то инструкция не может быть выполнена компьютером. Надеемся, что теперь фраза «Python — это высокоуровневый интерпретируемый кроссплатформенный язык программирования» стала для вас более понятной. ПЛЮСЫ И МИНУСЫ PYTHON Итак, почему же Python? Популярность этого языка растёт с каждым годом, и появляются всё новые и новые вакансии с требованием знания Python. Самое понятное преимущество для разработчика, на первый взгляд, — тот, у кого есть знания и опыт работы с Python, точно будет востребован на рынке. ?Но почему рынку это нужно? И в чём плюсы и минусы использования Python для решения различных задач? «Дружелюбный» синтаксис Недостаток по скорости работы с лихвой покрывается скоростью написания кода и возможностью лёгкой отладки благодаря очень простому и «человекочитабельному» синтаксису (и вы очень скоро в этом убедитесь). Это один из основных плюсов, которым Python выделяется среди остальных языков программирования.
Многогранность применения Python является кроссплатформенным: код, который вы напишете, будет работать на всех популярных платформах (Windows, Linux, Mac). Также у Pythonмножество сфер применения, начиная от программирования микроконтроллеров и заканчивая алгоритмами машинного обучения и анализа данных, благодаря которым Python и приобрёл такую популярность. Также Python можно использовать для разработки игр и работы с компьютерной графикой. С помощью Python очень удобно автоматизировать рутинные задачи, которые могут быть связаны с администрированием различных систем. А ещё Python позволяет быстро и просто создавать сайты.
Обилие библиотек Ещё широкому распространению языка Python способствовало обилие дополнительных библиотек — богатая коллекция уже готовых решений неких задач другими программистами с подробной документацией (справочником, описывающим, как пользоваться языком программирования) того, что они сделали. Остаётся только найти их и адаптировать под свои задачи. Скорость работы Python вне зависимости от версии является интерпретируемым языком программирования. Компилятор же преобразует всю программу сразу, а потом выполняет её. Отсюда вытекает первый минус языка Python — это скорость его работы. Интерпретируемые языки затрачивают время на преобразование в машинный код во время выполнения самой программы, в отличие от компилируемых, которые делают это до момента начала выполнения.
Неоптимальный расход ресурсов памяти Python довольно гибко работает с типами данных (динамическая типизация будет подробно рассмотрена в следующем модуле) — из-за этого его работа с памятью неоптимальна, и программы на Python потребляют больше ресурсов, чем могли бы.
Как видите, минусов оказалось не так много, но иногда они могут иметь решающее значение при выборе языка программирования для проекта. В целом, Python — как автомобиль «на каждый день»: очень удобный и универсальный в использовании, но проигрывает в скорости менее комфортным и более быстрым суперкарам. Вам не нужно очень долго учиться — сели и поехали. Уже через несколько занятий вы сможете писать свои собственные полноценные программы. Но это вовсе не значит, что Python не применяется для серьёзных задач. Всё как раз наоборот — многие крупные IT-компании используют Python в качестве рабочего инструмента: Facebook, Instagram, Netflix, Google, Yandex, Youtube, Dropbox, Reddit. На Python написаны Instagram, Spotify, Mozilla, игры (Civilistation IV, Battlefield). Основную тенденцию хорошо отражает решение, которое было принято Google: «Использовать Python, там, где можем, C++ — где должны». ВЕРСИИ PYTHON В литературе или в работе (хотя этот шанс стремительно уменьшается) вы можете встретить упоминание Python 2.6 или 2.7. Всё ещё можно сказать, что существует две принципиально разные версии Python: Python 2 и Python 3. Однако поддержка Python версии 2 была прекращена в январе 2020 года. Последняя версия 2.7.18 была выпущена в апреле 2020 года. Сейчас большая часть всего кода на Python уже переведена на версию 3, и новые разработки ведутся именно на этой версии языка . Python 3.0 разрабатывался с целью устранения фундаментальных изъянов в языке. Эти изменения невозможно было сделать с сохранением полной обратной совместимости с Python 2. → Главными целями разработки Python 3 были уменьшение дублирующийся функциональности и устранение устаревших и неэффективных реализаций в языке. Итак, актуальной версией Python является Python 3. Если у вас не стоит конкретной задачи, например по поддержке старого проекта, то вам совершенно точно надо выбрать Python 3. Вторая и третья версии плохо совместимы между собой. Это означает, что код, написанный на второй версии Python, не может быть легко перенесён в третью версию. Но и для Python 3 существует несколько различных типов:
ОКУМЕНТАЦИЯ СТАНДАРТНОЙ БИБЛИОТЕКИ → Наличие подробной стандартной библиотеки — это ещё один из плюсов выбора Python как первого и основного языка программирования. Стандартная библиотека Python содержит большое количество полезных модулей и является частью стандартного комплекта поставки Python. Ознакомиться со стандартной библиотекой Python очень важно, так как вы сможете использовать существующие решения из этих библиотек, и множество задач получится решить быстрее. Подробная и полная документация по стандартной библиотеке облегчает процесс обучения и использования. Посмотрим на основные составляющие стандартной библиотеки, документацию по ней для актуальной версии интерпретатора можно найти по ссылке. Документацию для специфической версии интерпретатора можно найти здесь. 1Итак, первое, что стоит держать в голове — это встроенные функции (Built-in Functions). С частью функций, возможно, вы не столкнётесь, а какие-то будут использоваться вами очень часто, например len(), range(), min(), max(). С функциями мы будем работать в течение всего курса, так что у вас будет много времени для того, чтобы подружиться с ними. 2Встроенных типов (Built-in Types) меньше, чем встроенных функций, и их нужно знать, потому что это основа для построения ваших программ. Специально их учить не нужно — на практике вы и так их запомните. К основным типам данных можно отнести: целые числа; числа с плавающей запятой; строки; списки; словари. Важно представлять, каким функционалом обладают эти типы данных. Подробнее со встроенными типами данных мы познакомимся в следующих модулях. 3Ещё одной важной частью стандартной библиотеки являются модули. Модули в Python немного похожи на модули в курсе: в обоих случаях это набор полезностей, объединённых одной темой. Модулем (библиотекой) в Python фактически является любой файл, содержащий программный код. Даже простейший скрипт, содержащий всего одну строку print(‘Hello World’), можно назвать модулем. → Программисты пишут модули для решения самых разнообразных задач и публикуют в свободном доступе. Вы можете подключать их и использовать в своих программах, а не «изобретать велосипед», что поможет вам значительно облегчить и сократить время на написание программного кода. Модулей в стандартной библиотеке большое количество. Некоторые из них мы будем использовать в нашем курсе, другие вам пригодятся в работе. Со временем вы познакомитесь с большей частью этого списка. А сейчас посмотрим на те из них, которые вам точно пригодятся в обучении и работе: pprint предоставляет возможность вывести на экран произвольные структуры данных Python в удобном для просмотра виде. Это часто важно при отладке кода, когда мы хотим видеть содержимое наших объектов. collections расширяет основной набор типов данных специализированными типами данных, которые очень удобно применять в некоторых случаях. Например, есть класс задач, в которых нам надо подсчитать количество элементов последовательности (списка, символьной строки), и здесь начинающие питонисты часто пытаются изобретать собственные решения. Этот процесс может занять длительное время, а результат — оказаться не совсем эффективным. Если нам надо что-то посчитать, определить количество вхождений какого-то элемента или самых редких/частых элементов, то здесь отлично подойдут инструменты из модуля collections. datetime применяется везде, где есть даты и их обработка. Здесь реализована арифметика дат, но основное внимание в реализации уделяется эффективному извлечению атрибутов (составные части даты — год, месяц, день и времени — часы, минуты, секунды, доли секунд) и манипулированию ими. Например, извлечение года, месяца, дня из даты, найти разницу в днях между двумя датами, определить день недели по дате — всё это можно сделать с помощью модуля datetime. itertools предоставляет набор быстрых инструментов для эффективной циклической обработки, которые могут быть полезны как сами по себе, так в сочетании. Эти инструменты позволяют лаконично и эффективно создавать специализированные инструменты на чистом Python. ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ Если вы помните, при установке интерпретатора Python на Windows вместе с ним устанавливается программа под названием IDLE. IDLE — это интегрированная среда разработки и обучения на языке Python (от англ. Integrated Development and Learning Environment). Так как при установке интерпретатора вы поставили галочку напротив IDLE, то вам не придётся искать дополнительные программы перед началом работы. Удобный графический интерфейс для работы с интерпретатором Python будет сразу доступен. Но возможности IDLE ограничены, она больше подходит для ознакомительных целей. Чтобы снять с себя рутинные задачи при написании кода, такие как поиск синтаксических ошибок, автодополнение кода или отладка программ, и сконцентрироваться именно на решении задачи, были разработаны специальные программы, которые имеют общее название IDE. IDE — интегрированная среда разработки (англ. Integrated Development Environment). Простыми словами можно сказать, что это программы, которые позволяют писать другие программы.
IDE состоит из трёх основных объектов: текстового редактора, который позволяет писать код; транслятора (в случае Python — интерпретатора), который исполняет ваш код; отладчик, который позволяет пошагово изучить вашу программу и облегчить поиск ошибки. Существует большое количество сред разработки, отличающихся наличием тех или иных функций, которые упрощают жизнь разработчика. Например, это может быть подсветка синтаксиса, автодополнение кода, взаимодействие с системами контроля версий и многое другое. Опять же нет каких-то однозначных критериев, какую среду выбрать. Вопрос привычки, либо удобства пользования. Возможно решающим моментом для вас станет наличие тех или иных фишек для работы. С перечнем IDE, позволяющих работать с Python, можно ознакомиться здесь. Для первого ознакомления можно выделить несколько популярных IDE: PyCharm, Spyder, Visual Studio, Eclipse + PyDev. Сравнительный анализ IDE для Python можно посмотреть здесь. В рамках данного курса мы будем работать с программным обеспечением компании JetBrains, а конкретно IDE PyCharm. две версии данного продукта: Professional Edition и Community Edition (CE). Версия PyCharm CE является бесплатной и содержит все необходимые функции для комфортного написания кода. Версия Professional содержит углубленные интеграции в отдельные сферы работы с Python, например веб-разработка. Важно понимать, что PyCharm — это среда разработки, которая автоматизирует многие вещи. Автоматизация для начинающего программиста может пойти во вред, так как сперва важно научиться понимать, что и как делать. Получить понимание необходимо через ручной труд. Поэтому мы предлагаем во время обучения на курсе использовать версию PyCharm CE. Если вам интересно посмотреть на различия PyCharm CE и PyCharm PE, вы можете скачать PyCharm Professional Edition и в течение месяца воспользоваться бесплатным пробным периодом. ПАКЕТНЫЕ МЕНЕДЖЕРЫ Мы уже разбирали модули, которые содержатся в стандартной библиотеке. Ещё модули можно объединять в наборы файлов, и тогда этот набор называется пакетом. Хоть в стандартной библиотеке немало модулей и пакетов, но их функционал достаточно ограничен. Поэтому существует так называемый «каталог пакетов Python» (PyPI (аббр. от англ. Python Package Index), где содержатся пакеты, написанные другими разработчиками, которыми они решили поделиться. Все эти пакеты хранятся в репозитории, который можно найти на сайте pypi.org. Каждый проект содержит описание, ссылки на исходный код и документацию на тему того, как пользоваться представленным решением. Для того чтобы установить себе эти пакеты, существует ещё один вид программ, называемых пакетными менеджерами. Пакетный менеджер,или система управления пакетами используется для установки и управления программными пакетами. Они помогают вам не вдаваться в подробности, где взять ту или иную библиотеку, как её установить на свой компьютер. Вместо этого вам представлен удобный интерфейс, позволяющий с помощью одной команды установить или удалить пакет, зная его название. Для Python можно выделить три основных пакетных менеджера: pip; pipenv; conda. Менеджер pip является модулем, написанным на Python, и позволяет работать только с установкой Python-пакетов. Pipenv использует связку pip и virtualenv, что упрощает их использование с помощью одного интерфейса командной строки. Conda обладает немного большим функционалом и может устанавливать пакеты не только для Python. Плюс сonda решает некоторые вопросы, связанные с установкой пакетов, которые используют сложные зависимости, в том числе платформозависимые (особенно этим грешат различные научные пакеты). ВИРТУАЛЬНЫЕ ОКРУЖЕНИЯ При создании программы могут нуждаться в каких-то внешних модулях и пакетах, которые нужны им для работы. Как мы говорили ранее, такой набор модулей и пакетов, которые нужны проекту для его работы, называется зависимостями. В мире программирования есть два подхода к хранению зависимостей: Каждый проект обладает собственным набором зависимостей, которые доступны только ему. Все проекты используют единый набор зависимостей, который еще называют общесистемным. Большая проблема Python — использование подхода с общесистемным набором зависимостей по умолчанию. Суть подхода заключается в том, что все модули устанавливают в одно место на вашем компьютере. В вашей системе установлен интерпретатор (или несколько) и все зависимости, которые вы ставите, например, с помощью модуля pip, ставятся в папку с этим интерпретатором. Таким образом любой проект, использующий этот интерпретатор, будет использовать все модули, которые в нем установлены. Отсюда вытекают следующие проблемы: Модули различаются лишь названиями, то есть нельзя иметь одновременно два установленных одинаковых модуля разных версий. Нельзя одновременно поставить pandas-0.21 и pandas-0.24. Нет простого способа экспортировать весь список использовавшихся в вашем проекте модулей для развертывания в другом месте. pip по умолчанию выдаст все модули, установленные в системе. Решить эти недостатки позволяют так называемые виртуальные окружения (англ. Virtual Environments). Вы можете создать «виртуальное окружение», внутри которого копируется интерпретатор, от которого данное окружение было создано, и стандартные модули (os, sys, etc…). То есть для проекта появляется мини-копия интерпретатора, которая доступна только ему. Если вы захотите установить дополнительные модули для выбранного проекта, то все зависимости будут установлены в папку текущего проекта, а не в общесистемную папку. Более того, если вы захотите установить дополнительные модули из данного виртуального окружения, то пакетный менеджер установит их в локальную папку окружения, а не общесистемную папку. То есть вы получаете локальное хранение зависимостей, которые теперь не конфликтуют друг с другом и доступны только для выбранного проекта. Создавая виртуальное окружение, вы изолируетесь от других проектов. Например, на картинке ниже находится три разных интерпретатора Python версий 2.7, 3.6, 3.4, и для каждого из них доступен свой набор модулей. В каждом из виртуальных окружений доступны два модуля — Py2neo и Django, но различных версий. В общесистемном подходе к хранению зависимостей вы бы могли хранить только одну версию каждого из модулей. Давайте ещё раз вспомним работу интерпретатора — той программы, которая будет выполнять написанную вами программу. Интерпретатор берёт каждую строку вашей программы, преобразует её в такую форму, которая понятна для выполнения компьютеру, и исполняет её, а затем берет следующую инструкцию. Делать он будет это до тех пор, пока не будут выполнены все строки вашего исходного файла либо не встретится команда, обозначающая конец интерпретации. Python выполняет предварительную обработку исходных кодов и делает их компиляцию в промежуточный код, называемый ещё байт-кодом. Каждая строка в исходном коде транслируется в группы инструкций байт-кода для повышения скорости выполнения программы, потому что с набором байт, тех самых единиц и нулей, компьютер умеет очень хорошо работать. После компиляции в байт-код рядом с файлом с исходным кодом создастся файл с таким же названием, но расширение у него будет .pyc. Такой файл с скомпилированным байт-кодом создаётся каждый раз, когда вы модифицируете свою программу. Если вы ничего не меняли, а просто повторно запустили свою программу, то процесс компиляции пропускается и выполняется сразу байт-код. Байт-код выполняется построчно, то есть выполняется не строка исходного текста, а её представление в виде набора единиц и нулей. Поэтому язык программирования Python является интерпретируемым языком программирования. В общем виде процесс работы интерпретатора выглядит так: Давайте теперь попробуем самостоятельно запустить свою программу с помощью интерпретатора, а не с помощью графического интерфейса PyCharm. Для начала запустим Terminal в PyCharm. Если вы используете виртуальное окружение, то у вас будет высвечиваться вот такая приставка. Если её нет, то вы работаете с системным интерпретатором: все пакеты, которые вы устанавливаете, будут доступны всем проектам, которые работают с этим системным интерпретатором. Однако разработчики PyCharm немного изменили подход к созданию виртуального окружения, поэтому в последних версиях вы можете не получить желаемый результат (появление venv в терминале) даже после выполнения всех шагов. Наиболее простой способ исправить эту проблему — нажать на стрелку в верхней части терминала и выбрать Command prompt — стандартную командную строку Windows. После этого должен появиться venv. |