Главная страница
Навигация по странице:

  • Присваивание

  • Встроенные типы данных

  • Простые типы данных

  • Выборка элемента: s = abcdef s[2] => c s[-2] => е Модификация, к типам str и bytes неприменима

  • Выборка фрагмента

  • Лекция 1. Лекция python и его место среди языков программирования


    Скачать 1.35 Mb.
    НазваниеЛекция python и его место среди языков программирования
    АнкорЛекция 1
    Дата19.04.2023
    Размер1.35 Mb.
    Формат файлаpdf
    Имя файлаЛекция 1.pdf
    ТипЛекция
    #1075094

    ЛЕКЦИЯ
    Python и его место среди языков программирования
    Запуск Python программ

    Python
    • Python - интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой.
    • Встроенные высокоуровневые структуры данных в сочетании с динамической типизацией и связыванием делают язык привлекательным для быстрой разработки приложений. Кроме того, его можно использовать в качестве сценарного языка для связи программных компонентов.
    • Синтаксис Python прост в изучении, в нем придается особое значение читаемости кода, а это сокращает затраты на сопровождение программных продуктов.
    • Python поддерживает модули и пакеты, поощряя модульность и повторное использование кода.
    • Интерпретатор Python и большая стандартная библиотека доступны бесплатно в виде исходных и исполняемых кодов для всех основных платформ и могут свободно распространяться.

    https://www.python.org/

    Ресурсы в сети Internet
    Официальный сайт языка Python
    https://www.python.org/
    Здесь находятся:
    • Официальная документация по языку и стандартной библиотеке отличный справочный материал, не столько для изучения, скорее для поиска ответа на любой вопрос
    • Документы PEP (Python Enhancement Proposals) фактически это изложение стандарта языка
    • Инсталляционные пакеты для Windows, Mac OS X и Linux

    Версии языка Python
    Версия 1 уже давно не используется
    Версия 2 Все еще используется в ряде проектов, но официально не поддерживается с 2020 года, рекомендуется использовать 3-ю версию
    Версия 3, изменения:
    • Эффективная работа с большими объемами данных
    • Строгая реализация работы с Unicode
    Последовательности байт выделены в отдельный тип данных
    • инструкция print заменена функцией print()
    Увеличена гибкость операции вывода на консоль
    В версию 2 введен модуль future для обеспечения обратной совместимости

    История
    • Создание Python было начато Гвидо ван Россумом
    (Guido van Rossum) в 1991 году, когда он работал над распределенной ОС Амеба. Ему требовался расширяемый язык, который бы обеспечил поддержку системных вызовов.
    За основу были взяты ABC и Модула-3.
    • В качестве названия он выбрал Python в честь комедийных серий BBC "Летающий цирк Монти-Пайтона", а вовсе не по названию змеи.

    Python это открытое программное обеспечение
    • Интерпретатор
    Собственная лицензия, совместимая с GPL
    Нет ограничений на интеграцию с коммерческими продуктами.
    Сделанные изменения не обязательно должны иметь открытую лицензию
    • Программы
     Реализация программы, как интерпретируемого текста препятствует ее "закрытию"
     Есть возможность распространения программ в виде байт-кода или в виде монолитного исполняемого файла, однако такой подход встречается достаточно редко
    • Открытое и бесплатное программное обеспечение это не одно и то же

    Почему Python ?
    • Используется в CERN
     наличие стандартных библиотек, ориентированных на научные вычисления
     комплексный тип данных, как один из базовых числовых типов
    • Используется в Google
    Google App Engine
    решение ряда внутренних инженерных задач
    • Фактический стандарт интерпретируемого языка программирования в
    Linux, постепенно заменяет собой Perl
    • Высокая производительность труда программиста
    • Программы [почти] независимы от платформы исполнения
    • Один из наиболее востребованных на рынке труда интерпретируемый язык программирования

    Недостатки Python
    • медленнее чем C/C++
    • распараллеливание программ сильно затруднено
     параллельные процессы достаточно эффективны
     мультитредовые приложения ограничены GIL (Global
    Interpreter Lock)
    • много возможностей, необходимость самодисциплины
    • часть ошибок выявляется только на этапе исполнения, это общий недостаток интерпретируемых языков
     юнит-тестирование приобретает особую важность
     непрерывная интеграция позволяет обнаруживать ошибки на ранних этапах разработки

    Среда разработки
    • Любой текстовый редактор
    • PyCharm от JetBrains https://www.jetbrains.com/pycharm/
    бесплатно по почте в зоне edu.ru https://www.jetbrains.com/student/

    Терминология
    • Программа на Питоне это последовательность инструкций
    • Инструкция это инструкция управления, например
    цикл или условие
    инструкция присваивания: переменная = выражение
    одиночное выражение записанное в строке текста программы, в том числе элементарное выражение
    Оператор - символ операции допустимой в выражении.
    • Вызов функции является оператором
    Выражение это последовательность операндов соединенных операторами.
    Выражение не может содержать инструкций.
    Операнд это выражение, в том числе элементарное выражение
    Элементарное выражение это литерал или переменная
    Литерал это буквальная запись данных, например число или строка
    • Следует различать строку текста программы (line) и строку-литерал (string)

    Особенности синтаксиса и терминологии
    • Строка текста программы это инструкция
    • Отступы это часть синтаксиса
    • Составная конструкция языка состоит из заголовка и блока
    Заголовок это строка, завершающаяся двоеточием
    Блок это последовательность строк, отступ которых на единицу больше, чем у строки-заголовка if apples > pears: eat_apples(apples - pears) print('We ate extra apples') get_more_fruits()
    • Массив это list, неизменяемый массив это tuple (кортеж)
    • Хеш или map (ассоциативный массив) это dict (словарь)
    • Язык поддерживает тип данных set (множество) к которому применимы теоретико-множественные операции

    Функция print()
    • Начиная с версии 3 в языке Python инструкция print заменена функцией print()
    • Большинство объектов имеют свойство "быть напечатанным", то есть быть преобразованным в текстовую строку
    • Функция print() воспринимает любое количество аргументов и "печатает" их последовательно в стандартный вывод разделяя пробелом и завершая символом новой строки
    • Именованные аргументы позволяют настроить поведение функции print()
    аргумент sep позволяет заменить разделитель
    аргумент end позволяет заменить конец строки
    аргумент file позволяет направить вывод в файл
    Пример замены разделителя: print(1, 2, 3) # => 1 2 3 print(1, 2, 3, sep='->') # => 1->2->3

    Литерал строки
    • Литерал строки это последовательность символов, заключенных в одинарные или двойные кавычки
    • Литералы в одинарных кавычках и литералы в двойных кавычках эквивалентны и интерпретируются одинаково
    • Литералы ограниченные тремя символами кавычек могут занимать несколько строк текста программы, при этом символы переноса строки входят в состав литерала как символ \n (10)
    • Внутри строк интерпретируются C Esc-последовательности
    • Переменные внутри строк не интерпретируются.
    • Для "внедрения" в строку значения переменной существует оператор
    % и синтаксис аналогичный функции printf() языка C
    Пример: s = '%2d часов\t%02d минут' % (16, 30) print(s)

    Комментарии
    Символ комментария #.
    • Сам символ и все символы справа от него и до конца строки игнорируются
    • Для комментирования большого фрагмента текста можно использовать строки в тройных кавычках
    • Строка это элементарное выражение, а выражение это инструкция, то есть синтаксически корректная конструкция
    Примеры: a = 1 a = a * 2 # здесь a увеличивается вдвое a = a * 2 # здесь a увеличивается вдвое еще раз a = a * 2 # и еще раз """ a = a * 2 # и еще раз a = a * 2 # и еще раз a = a * 2 # и еще раз """
    # После всех вычислений переменная a примет значение 8

    Объект
    Объект это композитная конструкция включающая в себя именованные элементы
    • Элементы в составе объекта называют атрибутами
    • Атрибуты могут быть объектами, функциями или данными элементарных типов
    • Для атрибутов-функций введен специальный термин метод
    • Для обращения к атрибуту (методу) используется оператор точка a.data = a.add(2)
    Метод имеет доступ к атрибутам и методам своего объекта используя аргумент self result = self.data + value
    Тип объекта хранится внутри объекта, атрибут __class__

    Объекты, классы типы
    • Почти все, что есть в языке Питон это объекты
    • Объект это воплощение (конкретная реализация) класса
    • Kласс это набор свойств, передаваемый объекту при его создании
    В Питоне тип объекта и его класс фактически синонимы
    Создавая новый класс мы вводим новый тип данных с именем созданного класса
    Встроенные в язык типы данных и типы данных введенные стандартной библиотекой реализованы соответствующими классами
    • Класс это тоже объект (!), атрибут объекта __class__ это ссылка на объект, являющийся его классом
    • Питон поддерживает как процедурный, так и объектно- ориентированный стили программирования
    • Внутри интерпретатора программа представлена в виде ориентированного графа, исполнение программы это обход графа

    Три фундаментальных конструкции
    В основе реализации языка Python лежат три фундаментальных конструкции:
    Присваивание
    Присваивание это придание имени объекту. Присваивание является реализацией целого ряда операций языка.
    Обращение к атрибуту
    Обращение к атрибуту это возможность получить доступ к отдельной части составного объекта
    Выражение
    Важно понимать как и из чего можно составить выражение, как выражение вычисляется, и где выражение можно использовать
    Знание этих конструкций критически важно для понимания языка

    Файл, модуль, объект
    • Файл с текстом программы на Питоне называют модулем
    • Файл переданный интерпретатору для исполнения называют главным модулем. Имя главного модуля __main__
    • Модуль это объект. Определенные в модуле глобальные переменные это его атрибуты, а функции это его методы. Имена функций также являются глобальными переменными.
    • При использовании конструкции вида from math import sin, cos, tan в текущем модуле создаются глобальные переменные sin, cos и tan, которые ссылаются на соответствующие функции из модуля math
    • Строго говоря, "глобальная" переменная это переменная уровня модуля. Получить доступ к такой переменной можно только явным использованием импорта.

    ЛЕКЦИЯ
    Типы данных и операции в языке Python Строки, байты и байтовые массивы

    Свойства типа данных
    Объект имеющий определенный тип обладает набором свойств.
    Часто для простоты говорят тип данных имеет свойство.
    Свойства объектов:
    • свойство быть изменяемым (mutable) или неизменяемым
    (immutable)
    • свойство быть перечислимым (enumerable), также используется термин "итерируемый тип"
    • свойство быть упорядоченным (sequence) или, другими словами, свойство быть последовательностью
    последовательность это итерируемый тип, дополнительно обладающий свойством упорядоченности

    Категории типов данных
    Встроенные типы данных
    • Встроенные типы данных не нужно импортировать явно
    • Среди встроенных типов данных есть как простые, так и композитные
    Типы данных определяемые пользователем (user-defined)
    • Класс созданный программистом становится типом данных для производимых от него объектов
    • Вместе с интерпретатором поставляется стандартная библиотека языка
    Типы данных включенные в стандартную библиотеку можно рассматривать как типы данных определенные пользователем

    Встроенные типы данных
    Простые типы данных
    • Числа
    • Логический тип bool со значениями True и False
    • Тип NoneType имеющий единственное значение None
    None используется как индикатор отсутствия информации.
    Аналогичен указателю NULL в языке C.
    • Композитные типы данных

    Композитные типы данных
    • Коллекции это композитные типы, которые можно рассматривать как совокупность объектов
    • Последовательности символов или байт
    Строки (неизменяемые последовательности символов)
    Байты (неизменяемые последовательности байт)
    Байтовые массивы (изменяемые последовательности байт)
    Все элементы последовательности символов или байт имеют один и тот же тип
    • Другие встроенные коллекции
    Списки (в других языках это массивы), литерал [ ]
    Кортежи (неизменяемые списки), литерал ( )
    Словари и множества (в других языках словарь это ассоциативный массив, хэш или map), литерал { }
    Списки, кортежи, словари и множества могут содержать элементы разных типов
    Объекты имеющие тип класса созданного пользователем также могут быть коллекциями

    Литералы
    • Литерал это "буквальная" запись содержимого объекта oЧисловые литералы аналогичны литералам языка C:
    Десятичные 45
    Шестнадцатеричные 0x45
    Восьмеричные 0o45 (в языке C 045)
    Двоичные 0b1101 (в языке C начиная со стандарта C++14) o Текстовые литералы (строки):
    'abc\ndef' # литерал в одинарных кавычках
    "abc\ndef" # литерал в двойных кавычках
    литерал в трех кавычках допускает перенос строки:
    """abc '''abc # Четыре литерала-строки на этом слайде содержат def""" def''' # одинаковые последовательности символов
    литералы в одинарных кавычках и литералы в двойных кавычках имеют одинаковые свойства

    Числа
    • Целые числа, разрядность не ограничена
    • Числа с плавающей запятой
    • Числа с фиксированной запятой (класс Decimal)
    • Рациональные числа или дроби (класс Fraction)
    • Комплексные числа
    • Встроенные функции (built-in call) позволяют осуществлять преобразование к нужному типу:
    a = 25 + int("28") => 53
    b = str(25) + "28" => "2528"
    c = 3 + int(2.8) # => 5
    • Примеры числовых литералов:
    123, 0x123, 0o123, 0b1101
    1.23, 12., .12, 1.2e3, 1.2+3.4j, 3.4J

    Операторы и операции
    • Инструкция это одно из элементарных действий, последовательность которых составляет программу
    • Операция это действие над объектами или объектом, совершаемое при вычислении выражения
    • Оператор это символ или зарезервированное слово для обозначения операции
    • Большая часть операторов языка двуместные:
    a + b # сложение, коммутативная операция
    a - b # вычитание, некоммутативная операция
    • Одноместные операторы, например:
    -x # унарный минус
    • Трехместный оператор x if y else z аналогичен оператору ?: языка C
    значение_если_да if вопрос else значение_если_нет # Питон
    вопрос ? значение_если_да : значение_если_нет # Язык C

    Операции над числами
    • операнды приводятся к наиболее длинному типу (как в языке C)
    • сложение: оператор +
    • вычитание: оператор –
    • умножение: оператор *
    • деление: оператор /
    • остаток от деления: оператор %
    • деление с округлением вниз: оператор //
    результат округляется до ближайшего меньшего целого
    тип результата сохраняется
    для классического округления есть встроенная функция round()
    • возведение в степень: оператор ** или функция pow(x, y)
    • Модуль math содержит базовый набор математических функций: sin(), cos(), sqrt() и др.

    Строки, байты и байтовые массивы
    • Строка, тип str
    последовательность символов объекты неизменяемы
    • Байты, тип bytes
    последовательность байт объекты неизменяемы
    • Байтовый массив, тип bytearray
    последовательность байт
    объекты изменяемы
    • Все три типа можно считать коллекциями
    • Все три типа обладают свойством упорядоченности
    • Объекты создаются вызовом функции, имя которой совпадает с именем типа: str() bytes() и bytearray(). Эти же функции служат для преобразования объекта к нужному типу.

    Литералы-строки и литералы-байты
    Литералы-байты имеют тот же синтаксис что и литералы-строки, но:
    • имеют префикс b перед открывающей кавычкой
    • могут содержать только символы ASCII или числовые коды от 0 до 255 в виде Esc- последовательностей языка C
    Примеры:
    # Литералы-строки
    # Литералы-байты s = 'abcdef' а = b'abcdef' s = "abcdef" а = b"abcdef" s = '''Line 1 a = b '''Line 1
    Line 2
    Line 2
    Line 3
    Line 3
    '''
    ''' s = """Line 1 a = b"""Line 1
    Line 2
    Line 2
    Line 3
    Line 3
    """
    """

    Произвольный символ в литерале
    • В литерал-строку или литерал-байты можно вставить произвольный символ Unicode
    • Для вставки в строку произвольного символа Unicode его шестнадцатеричное численное значение записывается после специального префикса
    \x - для однобайтового символа
    \u - для двухбайтового символа
    \U - для четырехбайтового символа
    Примеры для строк:
    '\xac', '\u20ac', '\U0001800a' # три строки по одному символу '\xac\u20ac\U0001800a' # строка из трех символов
    • Для литералов-байт допустим только префикс \x Пары символов \u и \U специального значения не имеют и интерпретируются "как есть"

    Строки и символы
    • В Питоне нет типа символ. Вместо единичного символа используется текстовая строка, содержащая один символ.
    • В Питоне есть ряд функций и методов для работы с символами аналогичных функциям языка C. Большая часть этих функций вместо действия для одного символа совершает действие для всех символов строки.
    • Функция ord() преобразует символ в его числовое значение в таблице
    Unicode. Для символов ASCII это числа от 0 до 127.
    Функция ord() применима только к строкам единичной длины, при более длинной строке происходит ошибка ord('я') # => 1103 ord('яя') # => Ошибка
    • Функция chr() преобразует число в строку с одним символом, код которого в таблице Unicode равен этому числу chr(1103) # => 'я'

    Оператор [ ]
    • Оператор [ ] служит для обращения к единичному элементу или фрагменту последовательности
    • Выбранный элемент или фрагмент может находиться в левой части инструкции присваивания, в этом случае происходит его модификация
    • Выбор элемента по индексу, индексация начинается с нуля.
    Отрицательный индекс означает отсчет элементов с конца. os[0], s[-1] # первый и последний элементы последовательности os[a:b] # фрагмент от символа с индексом a (включительно) до символа с индексом b (ИСКЛЮЧИТЕЛЬНО !) os[a:b:c] # c - шаг перебора символов
    умолчания: а = 0, b : до конца последовательности oc = s[:] # Вся последовательность, создается копия последовательности s

    Оператор [ ], примеры
    Выборка элемента:
    s = 'abcdef' s[2] => 'c' s[-2] => 'е'
    Модификация, к типам str и bytes неприменима:
    a = bytearray(b'abcdef') a[2] = ord(b'x') # => b'abxdef' a[2:] = b'123' # => b'ab123' # Размер заменяющего и заменяемого a[:-2] = b'98' # => b'9823' # фрагмента могут не совпадать a[:] = b'newtext' # => b'newtext' # Если указан шаг, совпадение a[::2] = b'1234' # => b'1e2t3x4' # размеров фрагментов обязательно
    Выборка фрагмента:
    s[2:] => 'cdef' s[:-2] # => 'abcd' s[:] # => 'abcdef' s[::2] # => 'ace'

    Операторы + и *
    Строки, байты и байтовые массивы можно "складывать". Результатом будет новый объект, являющийся соединением (конкатенацией) оригинальных объектов в порядке их следования. Тип результата это тип левого объекта.
    Примеры: s = 'Long' + 'Name' # => LongName a1 = bytearray(b'Long') + b'Name' # => bytearray(b'LongName') a2 = b'Long' + bytearray(b'Name') # => b'LongName'
    Строки байты и байтовые массивы можно "умножать" на целое число. При умножении на N результатом будет новый объект, в котором содержимое оригинального объекта повторено N раз. Операция коммутативна.
    Примеры: s = 'Abc' * 6 # => AbcAbcAbcAbcAbcAbc s = 72 * '=' # => Строка из семидесяти двух символов '='

    Создание объектов строк или байт
    • Объект может быть определен литералом
    • Объект может быть создан вызовом встроенной функции имя которой совпадает с именем класса объекта
    • Объект может быть скопирован выделением фрагмента включающего оригинальный объект целиком
    • Класс bytearray имеет метод copy()
    • Объект может быть считан из файла
    # Байты x1 = b'abcdef' x2 = bytes(x1) x3 = x2[:] нет
    # Байтовые массивы нет a2 = bytearray(x1) a3 = a2[:] a4 = a3.copy()
    # Строки s1 = 'abcdef' s2 = str(s1) s3 = s2[:] нет


    написать администратору сайта