С. В. Вабищевич инженерпрограммист компании ооо ск хайникс мемори солюшнс Восточная Европа
Скачать 1.28 Mb.
|
УДК 004.432Python(075.8) ББК 32.973–018.1я73-1 К71 Р е ц е н з е н т ы : кафедра информатики и методики преподавания информатики физико-математического факультета Белорусского государственного педагогического университета имени Максима Танка (заведующий кафедрой кандидат педагогических наук С. В. Вабищевич); инженер-программист компании ООО «СК хайникс мемори солюшнс Восточная Европа» С. В. Боярович К71 Косицин, Д. Ю. Язык программирования Python : учеб.-метод. пособие / Д. Ю. Косицин. – Минск : БГУ, 2019. – 136 с. ISBN 978-985-566-746-0. Учебно- методическое пособие содержит теоретический материал по основным синтаксическим конструкциям языка программирования Python, а также примеры, объясняющие особенности их использова- ния. Оно поможет студентам освоить язык программирования Python, обратив при этом внимание на многие детали реализации языка и раз- личие между его версиями. Предназначено для магистрантов учреждений высшего образова- ния, обучающихся по специальности 1–31 81 09 «Прикладная матема- тика и информатика». УДК 004.432Python(075.8) ББК 32.973–018.1я73-1 ISBN 978-985-566-746-0 © Косицин Д. Ю., 2019 © БГУ, 2019 ПРЕДИСЛОВИЕ Скриптовый язык Python – интерпретируемый высокоуров- невый язык программирования общего назначения. Появив- шись в 1991 г., этот язык продолжает активно развиваться и со- вершенствоваться. Акцент философии Python на читаемости кода, наличие обширной стандартной библиотеки сделали его популярным средством для решения множества задач. На теку- щий момент благодаря богатейшему разнообразию сторонних библиотек и фреймворков Python широко используется, в част- ности, в сфере web- разработки, научных расчетов и исследова- ний искусственного интеллекта, а также всякого рода прототи- пирования и скриптования. Данное учебно-методическое пособие является дополне- нием к дисциплине «Скриптовые языки программирования (Python)» и содержит лекции с примерами и пояснениями. Ма- териал разбит на главы, после которых помещены задачи для отработки изложенного материала. В издании рассматривает- ся Python 3.x как основная версия языка, но приводится срав- нение с Python 2.x и отличия между последними версиями язы- ка Python. Предназначено для изучающих язык программирования Python, желающих повторить и закрепить новый материал или получить углубленные знания по интересующим темам, а также для опытных разработчиков в качестве справочника. 4 Глава 1 БЫСТРЫЙ СТАРТ 1.1. О ЯЗЫКЕ ИСТОРИЯ ЯЗЫКА Основной автор языка программирования Python – Гви- до ван Россум. Первые версии языка появились в 1991 г. Основных версий на данный момент три: – Python 1.0 – появился в 1994 г.; – Python 2.0 – 2000 г.; – Python 3.0 – 2008 г. ОСОБЕННОСТИ ЯЗЫКА Особенности языка программирования Python следующие: – свободно распространяемый; – с открытым исходным кодом – можно разрабатывать свои мо- дули, а также вносить предложения по улучшению; – переносимый (кроссплатформенный) – есть возможность ин- терпретировать Python на многих платформах и архитектурах, в том числе использовать его для написания программ управления устрой- ствами (прошивок); – обладает неплохой стандартной библиотекой. С точки зрения классификации язык относится к следующим ка- тегориям: – высокоуровневый; – интерпретируемый – скрипты на Python компилируются в не- которые высокоуровневые инструкции (байт- код), которые после- довательно выполняются интерпретатором; – мультипарадигменный – построен на принципах объектно ори- ентированного программирования и реализует его основные меха- низмы в виде наследования, инкапсуляции и полиморфизма; – жесткая (сильная, strong) динамическая типизация – с одной стороны, переменная связывается с типом во время присваивания 5 значения, а не в момент объявления переменной, с другой – ошиб- ки, связанные с неверным использованием типов, предотвращают- ся во время выполнения программы (в run- time бросается исключе- ние), а также допускается некоторое неявное преобразование типов (например, приведение чисел или преобразование к булеву типу). ЭФФЕКТИВНОСТЬ С точки зрения скорости разработки Python характеризу- ется понятностью кода: – код легко писать – синтаксис максимально упрощен; – код легко читать – идеология кода, написанного на языке Python, такова, что есть возможность читать его как текст на есте- ственном языке; – код легко отлаживать – есть возможность посмотреть значе- ние практически любой переменной, а также состояние стека вызо- вов и присутствуют встроенные средства отладки в виде дебаггера; – для разработки есть официальное руководство по стилю кода (style guide; PEP-8 1 , PEP-257 2 ). С точки зрения производительности он медленнее многих язы- ков. Например, программа, выполняющая простые операции с ба- зовыми типами (числами, строками), интерпретируемая «чистым» Python без дополнительных оптимизаций, медленнее аналогичной программы, написанной на языке C++, в 5–100 раз. ОСНОВНЫЕ НАПРАВЛЕНИЯ РАЗРАБОТКИ НА PYTHON Используется Python в основном для следующих целей: – прототипирование – если есть необходимость сравнить неко- торое число подходов к разработке или некоторые архитектуры, до- вольно просто написать прототип на Python; – интеграция, реализация вспомогательных программ – простые программы для обработки текстов, преобразования форматов, дей- ствий с большим количеством файлов легко реализовать на Python ввиду большой стандартной библиотеки и наличия большого коли- чества сторонних библиотек; 1 https://www.python.org/dev/peps/pep-0008 2 https ://www.python.org/dev/peps/pep‑0257 6 – исследования – на Python можно относительно быстро кодиро- вать сложные математические вычисления, одновременно сохраняя и интерпретируя промежуточные результаты, работать с разными форматами данных; – web- сервисы и приложения – синтаксис языка Python позволя- ет максимально упростить и ускорить разработку web- приложений, поскольку написание всего приложения сводится к четкой и диффе- ренцированной реализации отдельных его компонентов, причем код остается легко читаемым. Язык программирования Python является удобной оберткой над многими низкоуровневыми примитивами: позволяет их едино- образно использовать и не думать о работе с памятью. ИДЕОЛОГИЯ PYTHON В Python есть свод правил и идей, которыми рекоменду- ется руководствоваться, так называемый Python Zen. Если вы на- берете в интерпретаторе следующую строку, вам откроется пол- ный список. >>> import this Ниже приведены некоторые из них, пожалуй, одни из основных: – красивое лучше неприятного (beautiful is better than ugly) – ста- райтесь код писать выразительно, соблюдая чистоту, отступы, кор- ректно называя переменные; – простое лучше сложного (simple is better than complex) – старай- тесь писать максимально простой код без длинных функций и без высокой вложенности; – сложное лучше мудреного (complex is better than complicated) – если не удается написать простой код, напишите качественный сложный, но так, чтобы в нем можно было разобраться; – читаемость очень важна (readability counts) – согласуется с пра- вилом о красивом и неприятном; важно, чтобы код можно было до- вольно быстро и легко воспринимать; – исключительные случаи не настолько исключительны, чтобы нарушать правила (special cases aren’t special enough to break the rules) – поскольку язык Python динамически типизированный, есть возмож- ность писать довольно общие функции и условные конструкции, что может значительно упростить код; – если реализацию сложно объяснить, то это плохая идея (if the implementation is hard to explain, it’s a bad idea); 7 – если реализацию легко объяснить, это может быть хорошая идея (if the implementation is easy to explain, it may be a good idea). Также следует упомянуть «Правило Человека- Паука»: с больши- ми возможностями приходит и большая ответственность! (Spider- Man rule: With Great Power Comes Great Responsibility!) 1.2. ВЕРСИИ И ИНТЕРПРЕТАТОРЫ ВЕРСИИ PYTHON Существуют две официальные и несовместимые вер- сии Python: Python 2.x и Python 3.x. Версия 3.x активно развивается (на август 2019 г. это версии 3.7.4 и 3.8.0b3). Версия 2.x по- прежнему поддерживается (последняя на сентябрь 2018 г. – версия 2.7.16), но окончание ее поддержки планируется в начале 2020 г. В версию Python 2.x были перенесены некоторые улучшения, из- начально реализованные для Python 3.x, однако эти улучшения ка- саются скорее библиотек. Стоит отметить, что некоторые основные версии Python, напри- мер Python 3.6 и Python 3.7, несовместимы между собой. ИНТЕРПРЕТАТОРЫ Поскольку язык программирования Python скриптовый, для его выполнения написаны разные интерпретаторы. Они ин- терпретируют скрипты, написанные на Python, в виде конструкций на других высокоуровневых языках (например, на C). Ниже представлены самые распространенные интерпретаторы Python: – CPython – официальный интерпретатор Python, написанный на языке программирования C; – Jython, IronPython – интерпретаторы на Java и.Net; особен- ность их в том, что они позволяют расширить стандартную библи- отеку Python библиотекой языка Java (Jython) или библиотекой.Net (IronPython); – PyPy, Numba – интерпретаторы, которые позволяют пред- компилировать некоторые конструкции или функци (Just- in- Time compilers); 8 – Cython, Nuitka – интерпретаторы на базе CPython, но они до- пускают указание типов, а также производят некоторые другие оп- тимизации для ускорения выполнения программ; – Stackless Python – реализация интерпретатора, отличающаяся специфической реализацией многопоточности; – Julia – другой язык, в некотором роде надстройка над Python. СРЕДЫ РАЗРАБОТКИ Обычно для разработки предлагается использовать один из следующих инструментов: – некоторый текстовый редактор с подсветкой синтаксиса и ав- тодополнением: SublimeText, Notepad++, Visual Studio Code; – блокнот Jupyter [Notebook] / IPython [Notebook] – специфиче- ский редактор текста, содержащий набор ячеек, каждая из которых может содержать либо код, а также результат его выполнения (на- пример, график или результат вычисления формулы), а также текст, описывающий и поясняющий код или процесс эксперимента; – PyCharm (Community Edition) – одна из самых популярных и удобных сред разработки в 2018 г.; – Visual Studio with plugin (native in VS 2017) – классическая сре- да разработки от компании Microsoft. УСТАНОВКА БИБЛИОТЕК В индексе пакетов PyPI (Python Package Index) есть все популярные библиотеки. Установить некоторую библиотеку можно с помощью утилиты pip, которая поставляется с последними версия- ми интерпретатора. Установить библиотеку, например с именем six, можно следующим образом: $ python -m pip install six Специфические инструкции по установке, а также документа- цию по библиотекам можно найти на их официальных сайтах или на сайте PyPI 1 При установке библиотек довольно часто возникает проблема с компиляцией библиотек. Ответ, почему не компилируется неко- торая библиотека, часто легко найти в сети Интернет. Следует отме- 1 https ://pypi.python.org/pypi тить, что лучше устанавливать уже скомпилированную версию ма- тематической библиотеки numpy под Windows с поддержкой mkl. При установке нескольких версий Python следите за тем, чтобы в системные переменные пути PATH и/или PYTHONPATH не попа- ли пути ни одного из интерпретаторов, иначе одна из версий интер- претатора в некоторый момент может попытаться загрузить библио- теки другой версии. Для массовой установки библиотек в системе Windows разрабо- таны специальные дистрибутивы, которые позволяют избежать ука- занных выше проблем: Python(x, y), Anaconda, Canopy. Для поддержки различных версий пакетов, например в случае отладки программ на новой версии библиотеки или необходимости работы на разных проектах с разными версиями библиотек, исполь- зуйте virtualenv. Она позволяет создавать так называемые «вирту- альные окружения», в которые можно независимо от других окруже- ний и интерпретаторов ставить необходимые библиотеки. 10 Глава 2 ОСНОВЫ ЯЗЫКА 2.1. ИНТЕРПРЕТАТОР Интерпретатор можно запустить в обычном режиме, т. е. выполнить с его помощью исходный код (запустить новый процесс с программой): $ python main.py Интерпретатор можно запустить в интерактивном режиме – ин- терпретатор без кода: $ python Следует отметить, что в интерпретаторе доступны следующие глобальные функции: – help(…) – справка по указанному объекту (выход: q) – exit() или quit() – выход 2.2. РАБОТА С ЧИСЛАМИ В PYTHON В Python доступны следующие типы для работы с числами: – int – тип, представляющий целое число произвольной длины; – float – тип, представляющий число с плавающей точкой; – complex – тип, представляющий комплексное число. В стандартной библиотеке также есть возможность восполь- зоваться типами Fraction (рациональная дробь) и Decimal (число с плавающей точкой произвольной точности). Замечание. В Python 2.x для работы с целыми числами использу- ются два типа – int (число от –2**31 до 2**31–1) и long (целое число произвольной длины), а в Python 3 – только один ( int). Эту особен- ность следует учитывать при использовании функции xrange (она принимает только значения типа int), а также при проверке значе- ния на целочисленность (нужно проверять сразу на принадлежность двум типам). 11 Над типами доступны обычные арифметические операции: сло- жение (+), вычитание (–), умножение (*), возведение в степень (**), деление (обычное «/» и целочисленное «//»), взятие остатка от де- ления (%) и функция, производящая деление с остатком (divmod). Рассмотрим особенности деления на следующем примере: >>> –2 * 7 // 3 + 4 ** (4 % 2) –4 Здесь при целочисленном делении частное является ближайшим снизу к результату деления целым числом. В следующем примере показана особенность оператора возве- дения в степень – он правоассоциативный: >>> 3 ** 2 ** 3 == 3 ** (2 ** 3) == 6561 True Оператор целочисленного деления работает следующим обра- зом: >>> print(7 / 3, 7 / 3.0, 7 // 3.0) 2.33333333333 2.33333333333 2.0 Замечание. В Python 2.x деление целых чисел является целочис- ленным. Для получения ожидаемого результата следует либо явно преобразовать делимое или делитель к типу float, либо подключить особенности деления из Python 3.x. Также в Python 2.x функция print является инструкцией (англ. statement). Также в Python доступны следующие битовые операторы: – операторы битового сдвига влево и вправо (<< и >>); – оператор побитового «и» (&); – оператор побитового «или» (|); – оператор исключающего «или» (^). Есть возможность задания чисел в других системах счисления. Для этого используются префиксы: 0b для бинарной, 0o – восьми- ричной, 0x – шестнадцатиричной системы счисления. >>> 0b1001 == (1 << 3) + 1 True Приоритет операторов не отличается от других языков (Py thon 2.x) 1 , (Python 3.x) 2 1 https ://docs.python.org/2/reference/expressions.html 2 https ://docs.python.org/3/reference/expressions.html 12 Важно! Тип bool наследуется от int и допускает только два зна- чения: True (1) и False (0). В Python 3.5 появился оператор матричного умножения @ (PEP465) 1 >>> x = numpy.array([1., 1., 1.]) >>> m = numpy.array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) >>> x @ m numpy.array([1., 1., 1.]) 2.3. ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ В Python доступны сравнения объектов на равенство и нера- венство (== и!=), определение предшествования объектов (<, >, <=, >=), оператор логического «и» ( and), логического «или» (or) и отрица- ния ( not). >>> 0!= 0 False >>> 2 * 2 == 4 True >>> False or 0 > –1 and True True >>> not 0 < 1 <= 5 False Обратите внимание на то, что допустимо множественное срав- нение, как в последнем примере. ПЕРЕМЕННЫЕ Поскольку язык Python динамически типизирован, объяв- ление переменной совмещено с ее определением, а указание типа переменной не требуется. Как и принято в других языках, к ариф- 1 https ://www.python.org/dev/peps/pep‑0465 13 метическим типам применимо неявное преобразование: в примере ниже целое число при сложении с числом с плавающей точкой при- ведено к типу последнего. >>> x = 1 >>> y = 2.5 >>> x + y 3.5 >>> True and y 2.5 Обратите внимание, что результатом последнего выражения яв- ляется число, а не переменная типа bool. На самом деле значение выражения определяется значением последнего вычисленного под- выражения, на основании которого можно однозначно определить результат всей конструкции. Вычисление сложных логических выражений происходит лени- во: ветки вычисляются согласно приоритетам, и как только можно определить, что все выражение будет истинным либо ложным, вы- числение прекращается. В Python также допустимы сокращенные операторы, которые мо- дифицируют результат переменной: >>> y /= 2 * x # y = 1.25 1.25 Комментарием в Python является код, написанный после сим- вола «#». Замечание. В интерпретаторе Python переменная «_» зарезерви- рована, и в ней хранится значение последнего вычисленного выра- жения. В коде такую переменную обычно используют для того, что- бы опустить присваивание некоторого элемента. УСЛОВНЫЙ ОПЕРАТОР IF Рассмотрим оператор условного ветвления на примере реа- лизации функции, которая вычисляет абсолютное значение величины. >>> |