Сегодня Python — один из самых популярных языков программирования, который охватывает все сферы применения. Язык Python поддерживается всеми операционными системами (существуют версии для Linux, Windows, MacOS) и позволяет решать сложные математические задачи, создавать графические изображения, разрабатывать веб-сайты, работать с реляционными базами данных. Он используется для решения большого количества как научных, так и бизнес-задач. В научной сфере Python широко используют даже ученые, далекие от программирования (химики, физики, биологи), благодаря простоте изучения.
В последние 5 лет он входит в пятерку наиболее востребованных технологий. Эта статья кратко описывает работу с языком программирования Python, который поддерживает объектно-ориентированный и процедурный методы программирования с интерпретацией команд (инструкций).
В этом языке программирования линейные и табличные структуры встроены в сам язык, что существенно облегчает и упрощает пользователю работу с ними.
Язык Python имеет мощную стандартную библиотеку, которую пользователь может расширять собственными библиотеками и библиотеками других пользователей. Расширение NumPy содержит реализацию различных математических вычислений, модуль Tkinter позволяет реализовать графический интерфейс пользователя.
Нидерландский программист Гвик ван Россум — истинный сторонник скетч-сериала «Летающий цирк Монти Пайтона» (англ. Monty Python’s Flying Circus). В честь этой программы он назвал созданный им язык программирования — Python. После того как Гвидо ван Россум разработал язык Python (примерно в 1991 году), он выложил его в Интернет. Язык Python понравился программистам и начал свободно распространяться. Таким образом, к разработке присоединилось сообщество программистов. В среднем каждые 2 или 2,5 года появляется новая версия языка.
Программы могут разрабатываться в консольном режиме (такие программы имеют расширение ру) и с графическим интерфейсом (программы имеют расширение pyw).
Программа на языке Python — это обычный текстовый файл, инструкции (команды) которого выполняются интерпретатором для каждой строки. При первом запуске программы создается байт-код, который хранится в файле с расширением pyw. Если после этого программа не менялась, то в ходе последующих ее запусков будет выполняться байт-код.
Программу на языке Python можно создавать и редактировать с помощью любого редактора, например, Notepad ++, Eclipse, Nano и др. Язык Python отличает скорость и простота скриптов. Вместе с набором доступных библиотек для работы с сетями и файлами это делает ее незаменимым помощником системного администратора.
Все данные языка, в том числе простые типы данных (числа, строки) являются объектами. В переменной хранится не сам объект, а ссылка на него, то есть адрес ячейки памяти, в которой хранится объект.
Язык Python поддерживает динамическую типизацию данных. Это значит, что объявлять типы данных не требуется, система самостоятельно следит и определяет их тип на основе их внешнего вида (содержимого). Также, автоматически освобождается память от тех данных, которые становятся ненужными.
Структура проекта на языке Python состоит из отдельных модулей. Модуль — это любой файл с кодом. Количество таких модулей не ограничено. Один модуль может быть вложен в другой модуль, то есть применяется иерархическая структура модулей. Модули могут группироваться в пакеты.
Модули могут разрабатываться самим программистом, а могут использоваться уже существующие в стандартной библиотеке языка. Один из модулей является главным, из него запускается проект на выполнение.
Как мы уже писали, язык Python поддерживает богатую иерархическую структуру вложенности модулей. Но в учебных целях обычно применяется самая простая архитектура программы, которая содержит главный файл и модули стандартной библиотеки. В такой архитектуре модули стандартной библиотеки импортируются непосредственно в главный файл программы. Реально программный модуль может состоять не только из инструкций языка Python, но и из переменных, функций и классов.
Выполнение программного кода
В интерактивном режиме результаты выполнения инструкций выводятся сразу после их ввода. То есть вводится первая инструкция, которая сразу выполняется, потом вводится вторая инструкция и т. д. Интерактивный режим целесообразно использовать на этапе изучения синтаксиса языка, когда нужно убедиться в правильности выполнения отдельных инструкций после их введения. А также для тестирования участков кода и отдельных команд программы.
Интерактивный режим работы является достаточно удобным для обучения. Но программный код, который вводится в интерактивном режиме, не сохраняется: он исчезает сразу после того, как интерпретатор языка Python его выполнит. Для повторного выполнения программного кода нужно ввести код заново, что является существенным недостатком интерактивного режима.
Чтобы постоянного использования программы, коды необходимо сохранять в файлах, которые, как ранее отмечалось, называют модулями. Файлы модулей — это программы, которые называют также сценариям, хотя между ними есть небольшая разница. Имя файла может не содержать расширения. Но если предполагается импортировать программный код из других файлов, то имя файла должно содержать расширение .py.
Файл программного кода интерпретатор может выполнять неограниченное количество раз. После запуска кода на выполнение интерпретатор выполняет последовательно одну инструкцию за другой в порядке их расположения и выдает результат на экран монитора. Если в программном коде будет обнаружена синтаксическая ошибка, соответствующее сообщение выводится на экран.
Основные элементы языка Python
Язык Python имеет много встроенных типов данных. В этом разделе приводится их перечень, для того чтобы сознательно понимать необходимость преобразования одного типа данных на другой в процессе программирования арифметических и других типов выражений.
Список в языке программирования Python — это определенная совокупность объектов любого типа в квадратных скобках, которые отделяются друг от друга запятой. Списки в некоторой степени напоминают массивы, но в массивах значения элементов могут быть только одного типа. Язык Python имеет значительное количество операций, функций и методов обработки списков.
Любая конструкция языка программирования начинается с алфавита. Из символов алфавита создаются лексемы (token). Лексема — это минимальная единица языка, которая имеет определенное самостоятельное значение и который понимает транслятор. Если транслятор ее не понимает, то выдается сообщение об ошибке в программе. По умолчанию символы кодируются в системе UTF-8.
Различают следующие виды лексем:
- ключевые (зарезервированные) слова (keywords)
- идентификаторы (identifiers)
- литералы (константы)
- операции;
- знаки препинания.
В языке Python используется несколько десятков ключевых (зарезервированных) слов (например, int, list, input, print, float и др.). С их назначением мы будем знакомиться постепенно, по мере возникновения надобности в их применении.
Идентификаторы (имена) используются для обозначения переменных, функций, которые создает программист, и других объектов. Идентификатор переменной может состоять из латинских букв, цифр и знака подчеркивания. Первым символом имени не может быть цифра или знак подчеркивания.
В системе (среде) программирования IDLE правильные имена переменных высвечиваются черным цветом. Если имя переменной отображается другим цветом, его необходимо заменить. Одинаковые имена с буквами на разных регистрах воспринимаются как разные имена. Например, идентификаторы ster и Ster является разными именами.
Имена переменных используются для доступа к данным. Данные в языке Python представлены в форме объектов. То есть объект — это участок памяти с определенным значением и возможными операциями его обработки. Каждый объект имеет свой тип, например int (целое число), str (строка) и др. В языке Python существуют базовые объектные типы (встроенные в язык) и разрабатываемые пользователем средствами самого языка или другими средствами. Отметим, что переменные хранят не сам объект, а ссылку на объект, то есть адрес объекта в памяти компьютера.
Как уже отмечалось, в языке Python применяется динамическая типизация переменных. Это значит, что не нужно объявлять типы переменных, как это делается во многих языках программирования, поскольку их тип определяется автоматически в процессе присваивания им значений. Этот тип определяется значением, расположенным справа от оператора присваивания, который обозначается знаком (=).
В одной строке можно присвоить одинаковые значения нескольким переменным, например:
>>>x = y = z = 441 # переменные x,y и z имеют тип int и значение 441
Еще раз отметим, что после выполнения оператора присваивания в переменной хранится не сам объект, а лишь ссылка на него, то есть адрес участка памяти, в которой хранится объект. Поэтому следует быть достаточно внимательным при записи групповых операций. Рассмотрим такой фрагмент программы.
>>>x=y=[7,15]
>>>x, y
([7,15], [7,15])
Из примера видно, что создается два объекта (х и у) типа list, но они имеют один и ту же адрес памяти, то есть реально создается один объект, значение которого выводится дважды. Для подтверждения этого изменим значение нулевого элемента объекта в (нумерация элементов в списке начинается с нуля) и проверим значения объектов.
>>>y [0]=50
>>>x, y
([50, 15], [50, 15])
Из примера видно, что мы изменили только значение y[0], а фактически объекты имеют одинаковые значения, потому что реально и х, и у имеют одинаковый адрес, то есть являются одним объектом.
Чтобы получить два объекта х и у, необходимо выполнить присваивание отдельно для каждого из них, например:
>>>x= [21, 807]
>>>y= [21, 807]
Для проверки, ссылаются две переменные на один и тот же объект, используется оператор is. Если переменные ссылаются на один объект, то оператор возвращает значение True, иначе — значение False.
>>>x=y=[60, 90]
>>>x is y
True
Одним оператором присваивания можно присвоить различные значения нескольким переменным. В таком случае переменные и значения отделяются запятой, например:
>>>x_1, х_2, х_3 = 13, 105, 27
>>>x_1, х_2, х_3
(13, 105, 27)
Количество элементов слева и справа от оператора присваивания должно быть одинаково, иначе будет выдано сообщение о синтаксической ошибке. Например, ошибка будет выдана для такой инструкции:
>>>x, у, z = (2, 44, 50, 65)
Избавиться от этого явления можно с помощью символа «звездочка» (*), который размещается перед одной из переменных. В таком случае эта переменная содержит список из всех лишних значений.
>>>x_1, x_2, *x_3=(46, 7, 21, 14)
>>>x_1, x_2, x_3
(46, 7, [21, 14])
Преобразование типов данных
Одна и та же переменная в процессе выполнения кода может ссылаться на объекты с различными типами данных. Например, после выполнения двух инструкций:
>>>x_1 = "принтер" # переменная х_1 ссылается на тип str
>>>x_1 = 3.8 >>>x_1 #теперь переменная х_1 ссылается на тип float
Переменная х_1 сначала ссылается на тип str, затем — на тип float. Для определения последнего типа данных, на который ссылается переменная, служит функция type (имя переменной).
Итак, тип данных — это характеристика объекта, а не переменной. Переменная содержит только ссылки на объект.
Для каждого конкретного типа данных существует строго определенный набор операций, которые могут выполняться над ним. Например, для данных типа int и float можно выполнять арифметические операции. Попытка выполнить, например, операцию сложения целого числа и строки, приведет к выводу сообщения о синтаксической ошибке:
>>> 43+"25"
Для преобразования одного типа данных на другой в языке Python применяются специальные функции. Рассмотрим основные функции преобразования одного типа данных на другой.
- bool ([объект]) — преобразование объекта на логический тип. Функция bool возвращает значение False в случае, если объект равен нулю или пустой, иначе — значение True.
- int ([объект [, <система счисления>]]) — преобразование объекта в целое число. Система счисления, в которой подается объект, может быть десятичной, восьмеричной, шестнадцатеричной. По умолчанию — десятичная система.
- float (целое число или строка) — преобразование целого числа или строки в число вещественного типа.
- str (объект) — преобразование объекта в строку.
- list (последовательность) — преобразование элементов последовательности в список.
Операторы и выражения
Операции над объектами выполняются с помощью соответствующих операторов. Объекты, над которыми выполняются операции, называют операндами. Каждый оператор может выполнять операции над строго определенными для него типами операндов.
В зависимости от типа объектов, над которыми выполняются операции, операторы группируются в арифметические, логические, сравнения, присваивания и др.
Арифметические операторы предназначены для выполнения операций над числами. Если операция выполняется над целым и действительным числами, то целое число будет сначала преобразовано в вещественный тип, а затем будет выполняться операция над действительными числами. Результатом операции в этом случае будет число действительного типа. Результатом операции деления всегда будет число действительного типа.
Кроме обычных арифметических операций, в языке Python также применяются такие операции:
- Целочисленных деления (без остатка): // — В результате выполнения операции 10.0 // 3.0 получаем результат 3.0;
- Деление по модулю (остаток от деления): % — В результате выполнения операции 10 % 3.0 получаем результат 1.0;
- Возведение в степень: ** В результате выполнения операции 10 ** 2 полученного ем результат 100.
В языке Python также используются арифметические операторы с присвоением:
- Увеличение значения переменной на указанную величину: x+= 8 (эквивалентно х = х + 8) х- = 8 (эквивалентно х = х-8)
- Уменьшение значения переменной на указанную величину: x*= 8 (эквивалентно х = х * 8)
- Деление значение переменной на указанную величину: x/= 8 (эквивалентно х = х / 8)
Для точного выполнения операций над числами в языке Python служит модуль decimal, в котором есть функция Decimal. Этот модуль следует импортировать в код программы. Можно импортировать модуль или его часть, например отдельную функцию. Один из вариантов импортирования можно реализовать с помощью инструкции: from decimal import Decimal. Например, можно выполнить следующие инструкции:
>>> From decimal import Decimal #импорт
>>> Decimal (" 1.123 ") - Decimal (" 0.5 ") # выполнения операции
Decimal ( '0.623') # результат
Операторы сравнения сравнивают значения объекта, который находится слева от оператора, со значением объекта, который расположен справа от этого оператора. Если условие выполняется, возвращается значение True, иначе — False. Состав и обозначения операторов сравнения приведены в таблице.
В языке Python используются такие логические операторы: not (нет), or (или) and (и). Они выполняются над данными логического типа, имеют два значения: True (истинное) и False (ложно).
Операторы над последовательностями выполняют операции над списками, кортежами и строками.
Операторы используются в выражениях. Понятие выражения в программировании аналогичное понятию выражения в математике.
Выражение языке программирования состоит из операндов, операторов и круглых скобок и определяет порядок выполнения операций над данными. Операнды выражения — это переменные, константы, функции, методы. Самое простое выражение состоит из одного операнда, например константы или переменной.
В зависимости от типа операндов и операций, используемых в выражении, различают выражения: арифметические (результат арифметического типа), логические (результат логического типа) и строчные (результат строчной типа). Для каждого типа операций существуют четкие правила их записи и исполнения.
Модули, функции и методы для обработки числовых данных
Числа могут подаваться в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. В процессе выполнения арифметических операций над числами в различных системах счисления они автоматически превращаются в десятичную систему счисления.
В языке Python используются целые числа (тип int), действительные (тип float) и комплексные (здесь не рассматриваются). Если в арифметической операции используются различные типы чисел, то числа типа int автоматически преобразуются в тип float, и результат получается типа float.
Все типы данных языка Python является классами. Классы содержат методы. Метод — это программа, которая выполняет ту или иную функцию. Метод вызывается для конкретного объекта. Для его вызова сначала указывается объект, затем точка, за которой следует имя метода <объект>. <Имя метода>. Каждый класс поддерживает свои методы.
Модуль math, который содержит стандартные константы и функции, используют для работы с числами. Для работы с константами и функциями необходимо импортировать его в программу с помощью инструкции import math.
Стек и очередь
Работа со стеком в программировании некоторой степени напоминает работу с кипой книг: на первую книгу кладется вторая, во вторую — третья, на третью — четвертая и так далее. Чтобы взять первую книгу, положенную в кипу, необходимо снять сначала четвертую, потом третью, далее вторую и, наконец, первую.
Стек работает в порядке LIFO (Last In, First Out), то есть последний добавлен в стек фрагмент памяти будет первым в очереди на выход из стека. Каждый раз, когда функция объявляет новую переменную, она добавляется в стек. А когда эта переменная становится неактуальной (например, когда функция прекращает работу), она автоматически удаляется из стека и область памяти становится доступной для других стековых переменных.
Стек часто используется для организации вызова подпрограмм и возврата в основную программу. Для точки основной программы, с которой осуществляется обращение к подпрограмме, в стеке запоминается адрес основной программы, на который следует вернуться после завершения подпрограммы.
Во время каждого обращения к подпрограмме в стек добавляются новые адреса возврата. После каждого завершения подпрограммы из стека снимается адрес возврата в основную программу. Учитывая то, что обращение к подпрограммам выполняется достаточно часто, стек основном реализуется на аппаратном уровне, а не программном.
Программно стек реализуется на основе списка или массива. Если используется массив, то нужно определять его размер, ячейки которого используются по мере необходимости. Неправильное определение размера массива может привести к ошибкам в работе программы или к неэффективному использованию памяти.
Для списка для каждого элемента отводится блок памяти, объем которого должен быть достаточен для сохранения значения элемента и ссылки на предыдущий и следующий элементы стека.
Для работы со стеком применяются такие определенные для списков методы:
- метод append () — для добавления нового элемента в стек;
- метод pop () — для выборки элемента из вершины стека (вершиной стека называют последний введен элемент).
Очередь в программировании — это структура данных, которая работает по принципу «первый пришел — первый ушел». Ее можно сравнить, например, с очередью в железнодорожную кассу: первый клиент у кассы обслуживается первым. Добавляемый элемент в очередь, оказывается в ее конце, а элемент, который удаляется из очереди, находится в ее начале.
Кортежи, диапазоны, множества
Кортеж — это совокупность постоянных объектов любого типа в круглых скобках (или без них), которые отделяются друг от друга запятой.
Кортежи похожи на списки, но отличаются от них тем, что кортежи являются неизменными последовательностями и вместо квадратных скобок применяются обычные скобки. Самый простой способ создания кортежа — перечисление его элементов через запятую в круглых скобках или без них.
Позиция элемента в кортеже определяется его индексом, нумерация начинается с нуля. В кортеже, как и в других последовательностях, можно получить элемент по его индексу, получить срез, конкатенацию, повторение, проверку на вхождение (оператор in) и не-вхождения.
Диапазон — это неизменная последовательность целых чисел с начальным, конечным значениями и шагом их изменения.
Множество — это неупорядоченная коллекция уникальных (тех, которые не повторяются) объектов любого типа.
Существует два типа множеств: переменная (set) и неизменная (frozenset ()). Множество переменного типа создается с помощью встроенной функции set, генераторов множеств, литералов множеств и других.
Множества в языке Python создаются совершенно случайным образом. Элементы можно размещать как угодно, впоследствии они все равно расположатся в случайном порядке. Кроме того, множества не могут иметь элементов, которые повторяются, поэтому все элементы, которые будут одинаковыми, НЕ будут выведены повторно.