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

  • Типы, используемые в Python

  • True

  • Синтаксис и семантика

  • Минусы

  • Глобальная блокировка интерпретатора (GIL)

  • Невозможность модификации встроенных классов

  • РЕФЕРАТ Python - мультипарадигмальный язык программирования. Python мультипарадигмальный язык программирования


    Скачать 44.3 Kb.
    НазваниеPython мультипарадигмальный язык программирования
    АнкорРЕФЕРАТ Python - мультипарадигмальный язык программирования
    Дата27.06.2022
    Размер44.3 Kb.
    Формат файлаdocx
    Имя файлаРЕФЕРАТ Python - мультипарадигмальный язык программирования.docx
    ТипРеферат
    #617957


    Тверской Казачий Технологический Институт им. Разумовского (филиал МГУТИ)


    РЕФЕРАТ

    На тему: «Python - мультипарадигмальный язык программирования»

    по предмету: «Разработка, внедрение.»

    Выполнил студент:

    группы ПИ 9-3 Шамарина С.С.

    г.Тверь 2022 г.
    Python (МФА: [ˈpʌɪθ(ə)n]; в русском языке встречаются названия пито́н или па́йтон) — высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ. Язык является полностью объектно-ориентированным в том плане, что всё является объектами. Необычной особенностью языка является выделение блоков кода пробельными отступами. Синтаксис ядра языка минималистичен, за счёт чего на практике редко возникает необходимость обращаться к документации. Сам же язык известен как интерпретируемый и используется в том числе для написания скриптов. Недостатками языка являются зачастую более низкая скорость работы и более высокое потребление памяти написанных на нём программ по сравнению с аналогичным кодом, написанным на компилируемых языках, таких как C или C++.

    Python является мультипарадигмальным языком программирования, поддерживающим императивное, процедурное, структурное, объектно-ориентированное программирование, метапрограммирование и функциональное программирование. Задачи обобщённого программирования решаются за счёт динамической типизации. Аспектно-ориентированное программирование частично поддерживается через декораторы, более полноценная поддержка обеспечивается дополнительными фреймворками. Такие методики как контрактное и логическое программирование можно реализовать с помощью библиотек или расширений. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений с глобальной блокировкой интерпретатора (GIL), высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.

    Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ и являющийся стандартом де-факто языка. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. CPython компилирует исходные тексты в высокоуровневый байт-код, который исполняется в стековой виртуальной машине. К другим трём основным реализациям языка относятся Jython (для JVM), IronPython (для CLR/.NET) и PyPy. PyPy написан на подмножестве языка Python (RPython) и разрабатывался как альтернатива CPython с целью повышения скорости исполнения программ, в том числе за счёт использования JIT-компиляции. Поддержка версии Python 2 закончилась в 2020 году. На текущий момент активно развивается версия языка Python 3. Разработка языка ведётся через предложения по расширению языка PEP (англ. Python Enhancement Proposal), в которых описываются нововведения, делаются корректировки согласно обратной связи от сообщества и документируются итоговые решения.

    Стандартная библиотека включает большой набор полезных переносимых функций, начиная с возможностей для работы с текстом и заканчивая средствами для написания сетевых приложений. Дополнительные возможности, такие как математическое моделирование, работа с оборудованием, написание веб-приложений или разработка игр, могут реализовываться посредством обширного количества сторонних библиотек, а также интеграцией библиотек, написанных на Си или C++, при этом и сам интерпретатор Python может интегрироваться в проекты, написанные на этих языках. Существует и специализированный репозиторий программного обеспечения, написанного на Python, — PyPI. Данный репозиторий предоставляет средства для простой установки пакетов в операционную систему и стал стандартом де-факто для Python. По состоянию на 2019 год в нём содержалось более 175 тысяч пакетов.

    Python стал одним из самых популярных языков, он используется в анализе данных, машинном обучении, DevOps и веб-разработке, а также в других сферах, включая разработку игр. За счёт читабельности, простого синтаксиса и отсутствия необходимости в компиляции язык хорошо подходит для обучения программированию, позволяя концентрироваться на изучении алгоритмов, концептов и парадигм. Отладка же и экспериментирование в значительной степени облегчаются тем фактом, что язык является интерпретируемым. Применяется язык многими крупными компаниями, такими как Google или Facebook. По состоянию на октябрь 2021 года Python занимает первое место в рейтинге TIOBE популярности языков программирования с показателем 11,27%. «Языком года» по версии TIOBE Python объявлялся в 2007, 2010, 2018 и 2020 годах.

    Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, практически под все варианты UNIX (включая FreeBSD и Linux), Android, Plan 9, Mac OS и macOS, iPhone OS (iOS) 2.0 и выше, iPadOS, Palm OS, OS/2, Amiga, HaikuOS, AS/400, OS/390, Windows Mobile и Symbian.

    По мере устаревания платформы её поддержка в основной ветви языка прекращается. Например, с версии 2.6 прекращена поддержка Windows 95, Windows 98 и Windows ME. В версии 3.5 перестала поддерживаться Windows XP В версии 3.9 перестала поддерживаться Windows Vista и Windows 7.

    При этом, в отличие от многих портируемых систем, для всех основных платформ Python имеет поддержку характерных для данной платформы технологий (например, Microsoft COM/DCOM). Более того, существует специальная версия Python для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Python и даже быть написанными на Python. Также несколько проектов обеспечивают интеграцию с платформой Microsoft.NET, основные из которых — IronPython и Python.Net.

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

    Добавить новый тип можно либо написав класс (class), либо определив новый тип в модуле расширения (например, написанном на языке C). Система классов поддерживает наследование (одиночное и множественное) и метапрограммирование. Возможно наследование от большинства встроенных типов и типов расширений.

    Типы, используемые в Python

    Тип

    Изменяемость

    Описание

    Примеры

    bool

    Неизменяемый

    Логический тип

    True False

    bytearray

    Изменяемый

    Массив байтов

    bytearray(b'Some ASCII')
    bytearray(b"Some ASCII") bytearray([119, 105, 107, 105])


    bytes

    Неизменяемый

    Массив байтов

    b'Some ASCII'
    b"Some ASCII"
    bytes([119, 105, 107, 105])


    complex

    Неизменяемый

    Комплексное число

    3+2.7j

    dict

    Изменяемый

    Словарь (ассоциативный массив), представляет собой коллекцию пар «ключ—значение»; значение может быть любого типа, ключ должен иметь хешируемый тип

    {'key1': 1.0, 3: False}
    {}

    ellipsis[К 1]

    Неизменяемый

    Многоточие[en] (элипсис). Используется в основном в NumPy для сокращённого задания среза многомерного массива. В самом Python присутствует для поддержки пользовательских типов и таких расширений, как NumPy

    ...
    Ellipsis
    Для 
    NumPy:
    x[i, ..., j],
    что эквивалентно
    x[i, :, :, j]


    float

    Неизменяемый

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

    1.414

    frozenset

    Неизменяемый

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

    frozenset([4.0, 'string', True])

    int

    Неизменяемый

    Целое число неограниченного размера

    42

    list

    Изменяемый

    Список, может содержать внутри себя различные типы данных

    [4.0, 'string', True]



    NoneType[К 1]

    Неизменяемый

    Объект, представляющий собой отсутствие значения, часто называемый Null в других языках.

    None

    NotImplementedType[К 1]

    Неизменяемый

    Объект, который возвращается при перегрузке операторов, когда типы операндов не поддерживаются.

    NotImplemented

    range

    Неизменяемый

    Последовательность целых чисел от какого-то одного значения до другого, обычно используется для повторения операции несколько раз при помощи for

    range(1, 10)
    range(10, -5, -2)


    set

    Изменяемый

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

    {4.0, 'string', True}
    set()

    str

    Неизменяемый

    Строковый тип

    'Wikipedia' "Wikipedia" """Spanningmultiplelines"""

    tuple

    Неизменяемый

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

    В качестве неизменяемого списка:
    (4.0, 'string', True
    )('single element',)
    В качестве записей:
    lax_coordinates = (33.9425, -118.408056)
    city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014)

    Синтаксис и семантика

    Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Python программ легко читаем. При передаче аргументов в функции Python использует вызов по соиспользованию (call-by-sharing).

    См. также: Синтаксис и семантика Python[en]

    Операторы

    Набор операторов достаточно традиционен.

    Условный оператор if (если). При наличии нескольких условий и альтернатив применяется необязательный блок elif(сокр. от else if) который может повторяться в коде неограниченное число раз. Если ни одно из условий не было соблюдено, то выполняется необязательный блок else (иначе).

    Оператор цикла while.

    Оператор цикла for.

    Операторы обработки исключений try — except — else — finally.

    Оператор определения класса class.

    Оператор определения функции, метода или генератора def. Внутри возможно применение return (возврат) для возврата из функции или метода, а в случае генератора — yield (давать).

    Оператор pass ничего не делает. Используется для пустых блоков кода.

    Система отступов

    Одной из интересных синтаксических особенностей языка является выделение блоков кода с помощью отступов (пробелов или табуляций), поэтому в Python отсутствуют операторные скобки begin/end, как в языке Паскаль, или фигурные скобки, как в Си. Такой «трюк» позволяет сократить количество строк и символов в программе и приучает к «хорошему» стилю программирования. С другой стороны, поведение и даже корректность программы может зависеть от начальных пробелов в тексте. Тем, кто привык программировать на языках с явным выделением начала и конца блоков, такое поведение поначалу может показаться неинтуитивным и неудобным.

    Сам Гвидо писал:

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

    Функциональное программирование

    Несмотря на то, что Python изначально не задумывался как язык функционального программирования, Python поддерживает программирование в стиле функционального программирования, в частности:

    функция является объектом первого класса,

    функции высших порядков,

    рекурсия,

    фокус на работу со списками,

    аналог замыканий,

    частичное применение функции с помощью метода partial(),

    возможность реализации других средств на самом языке (например, карринг).

    Однако, в отличие от большинства языков, непосредственно ориентированных на функциональное программирование, Python не является чистым языком программирования и код не защищён от побочных эффектов.

    В стандартной библиотеке Python существуют специальные пакеты operator и functools для функционального программирования.

    Минусы:

    Низкое быстродействие

    Классический Python имеет общий со многими другими интерпретируемыми языками недостаток — сравнительно невысокую скорость выполнения программ. В некоторой степени ситуацию улучшает сохранение байт-кода (расширения .pyc и, до версии 3.5, .pyo), которое позволяет интерпретатору не тратить время на синтаксический разбор текста модулей при каждом запуске.

    Существуют реализации языка Python, вводящие высокопроизводительные виртуальные машины (ВМ) в качестве бэкенда компилятора. Примерами таких реализаций может служить PyPy, базирующийся на RPython; более ранней инициативой является проект Parrot. Ожидается, что использование ВМ типа LLVM приведёт к тем же результатам, что и использование аналогичных подходов для реализаций языка Java, где низкая вычислительная производительность в основном преодолена. Однако нельзя забывать, что динамический характер Python делает неизбежными дополнительные накладные расходы при исполнении программ, что ограничивает производительность Python-систем независимо от применяемых технологий. Вследствие этого для написания критических участков кода используются низкоуровневые языки, интеграция с которыми обеспечивается множеством программ и библиотек (см. выше).

    В самой популярной реализации языка Python интерпретатор довольно велик и более требователен к ресурсам, чем в аналогичных популярных реализациях Tcl, Forth, LISP или Lua, что ограничивает его применение во встроенных системах. Тем не менее, Python портирован на некоторые относительно малопроизводительные платформы.

    Глобальная блокировка интерпретатора (GIL)

    Схематичное изображение работы потоков под GIL. Зелёный — поток, удерживающий GIL, красные — блокированные потоки

    Основная статья: Global Interpreter Lock

    Интерпретатор Python в CPython (а также Stackless и PyPy) использует потоко-небезопасные данные, во избежание разрушения которых при совместной модификации из разных потоков применяется глобальная блокировка интерпретатора — GIL (Global Interpreter Lock): в ходе исполнения кода поток интерпретатора блокирует GIL, выполняет в течение фиксированного времени (по умолчанию 5 миллисекунд[К 2]) некоторое количество инструкций, после чего освобождает блокировку и приостанавливается, давая возможность работать другим потокам. GIL также освобождается во время ввода-вывода, изменения и проверки состояния синхронизирующих примитивов, при исполнении кода расширений, не обращающихся к данным интерпретатора, например, NumPy/SciPy. Таким образом, в каждый момент времени в одном процессе интерпретатора Python может исполняться только один поток кода на Python, независимо от числа доступных процессорных ядер.

    Потери производительности от GIL зависят от характера программ и архитектуры системы. Большинство программ является однопоточными, либо запускает всего несколько потоков, из которых часть в каждый конкретный момент простаивает в ожидании. Персональные компьютеры обычно имеют небольшое количество процессорных ядер, которые загружены параллельно исполняющимися в системе процессами, так что реальные потери производительности на персональных компьютерах из-за GIL невелики. Но в серверных приложениях может быть удобно использовать десятки и сотни (а то и больше) параллельных потоков (например, в системах массового обслуживания, где каждый поток обрабатывает данные для отдельного пользовательского запроса), а серверы на конец 2010-х годов нередко имеют десятки и даже сотни процессорных ядер, то есть технически могут обеспечить этим потокам физически одновременное исполнение; в таких условиях GIL может приводить к действительно значительному снижению общей производительности, так как лишает программу возможности полноценно использовать ресурсы многоядерных систем.

    Гвидо ван Россум говорил, что GIL «не так уж и плох» и он будет в CPython до тех пор, пока «кто-то другой» не представит реализацию Python без GIL, с которой бы однопоточные скрипты работали так же быстро.

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

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

    python-safethread — CPython без GIL, по утверждениям авторов, обеспечивает на однопоточных приложениях скорость порядка 60-65 % от скорости CPython.

    Реализация потоков через процессы ОС, например, модуль processing (с версии 2.6 переименован в multiprocessing). В UNIX-подобных системах накладные расходы при порождении процесса невелики, но в Windows использование процессов вместо потоков ведёт к существенному увеличению расхода оперативной памяти.

    Отказ от совместного использования изменяемых данных и вызовов внешнего кода. При этом данные дублируются в потоках и их синхронизация (если таковая нужна) лежит на программисте. Этот подход также увеличивает потребление оперативной памяти, хотя и не настолько сильно, как при использовании процессов в Windows.

    Библиотеки, обеспечивающие собственную организацию поддержки потоков, такие как parallelpython, pympi и другие.

    Радикальным вариантом решения проблемы может быть переход на Jython и IronPython, работающие на виртуальных машинах Java и .NET/Mono: эти реализации вообще не используют GIL.

    Невозможность модификации встроенных классов

    По сравнению с Ruby и некоторыми другими языками, в Python отсутствует возможность модифицировать встроенные классы, такие, как int, str, float, list и другие, что, однако, позволяет Python потреблять меньше оперативной памяти и быстрее работать. Ещё одной причиной введения такого ограничения является необходимость согласования с модулями расширения. Многие модули (в целях оптимизации быстродействия) преобразуют Python-объекты элементарных типов к соответствующим Си-типам вместо манипуляций с ними посредством Си-API. Также это избавляет от многих потенциальных ошибок при неконтролируемом динамическом переопределении встроенных типов.


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