Главная страница

Курсовая работа Калашников. Задача по следующим критериям Сравнить получившиеся коды программ


Скачать 131.17 Kb.
НазваниеЗадача по следующим критериям Сравнить получившиеся коды программ
Дата06.05.2023
Размер131.17 Kb.
Формат файлаdocx
Имя файлаКурсовая работа Калашников.docx
ТипЗадача
#1112667
страница5 из 8
1   2   3   4   5   6   7   8

6. Возможности

6.1. Интерактивный режим


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

Так выглядит общение с Питоном в интерактивном режиме:

>>> 2 ** 100 # возведение 2 в степень 100

1267650600228229401496703205376L

>>> from math import * # импорт математических функций

>>> sin(pi * 0.5) # вычисление синуса от половины пи

1.0

>>> help(sorted) # помощь по функции sorted

Help on built-in function sorted in module __builtin__:

sorted(...)

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

В интерактивном режиме доступен отладчик pdb и система помощи (вызывается по help()). Система помощи работает для модулей, классов и функций, только если те были снабжены строками документации.

Кроме встроенной, существуют и улучшенные интерактивные оболочки IPython[18] и bpython[19].

6.2. Объектно-ориентированное программирование


Дизайн языка Python построен вокруг объектно-ориентированной модели программирования. Реализация ООП в Питоне является элегантной, мощной и хорошо продуманной, но вместе с тем достаточно специфической по сравнению с другими объектно-ориентированными языками.

Возможности и особенности:

  1. Классы являются одновременно объектами со всеми ниже приведёнными возможностями.

  2. Наследование, в том числе множественное.

  3. Полиморфизм (все функции виртуальные).

  4. Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами.

  5. Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.

  6. Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).

  7. Свойства (имитация поля с помощью функций).

  8. Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.).

  9. Методы для управления наиболее распространёнными операциями (истинностное значение, len(), глубокое копирование, сериализация, итерация по объекту, …)

  10. Метапрограммирование (управление созданием классов, триггеры на создание классов, и др.)

  11. Полная интроспекция.

  12. Классовые и статические методы, классовые поля.

  13. Классы, вложенные в функции и классы.


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


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

  • функция является объектом

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

  • рекурсия

  • развитая обработка списков (списковые выражения, операции над последовательностями, итераторы)

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

  • частичное применение функции

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


6.4. Модули и пакеты


Программное обеспечение (приложение или библиотека) на Питоне оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут располагаться как в каталогах, так и в ZIP-архивах. Модули могут быть двух типов по своему происхождению: модули, написанные на «чистом» Питоне, и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть «чистый» модуль pickle и его аналог на Си: cPickle. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имён модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload().

6.5. Интроспекция


Python поддерживает полную интроспекцию времени исполнения. Это означает, что для любого объекта можно получить всю информацию о его внутренней структуре.

Применение интроспекции является важной частью того, что называют pythonic style, и широко применяется в библиотеках и фреймворках Python, таких как PyRO, PLY, Cherry, Django и др., значительно экономя время использующего их программиста.

6.6. Обработка исключений


Обработка исключений поддерживается в Python посредством операторов try, except, else, finally, raise, образующих блок обработки исключения. В общем случае блок выглядит следующим образом:

try:

# Здесь код, который может вызвать исключение

raise Exception("message") # Exception, это один из стандартных типов исключения (всего лишь класс),

# может использоваться любой другой, в том числе свой

except (Тип исключения1, Тип исключения2, …), Переменная:

# Код в блоке выполняется, если тип исключения совпадает с одним из типов

# (Тип исключения1, Тип исключения2, …) или является наследником одного

# из этих типов.

# Полученное исключение доступно в необязательной Переменной.

except (Тип исключения3, Тип исключения4, …), Переменная:

# Количество блоков except не ограниченно

raise # Сгенерировать исключение "поверх" полученного; без параметров - повторно сгенерировать полученное

except:

# Будет выполнено при любом исключении, не обработанном типизированными блоками except

else:

# Код блока выполняется, если не было поймано исключений.

finally:

# Будет исполнено в любом случае, возможно после соответствующего

# блока except или else

Совместное использование else, except и finally стало возможно только начиная с Python 2.5. Информация о текущем исключении всегда доступна через sys.exc_info(). Кроме значения исключения, Python также сохраняет состояние стека вплоть до точки возбуждения исключения — так называемый traceback.

В отличие от компилируемых языков программирования, в Python использование исключения не приводит к значительным накладным расходам (а зачастую даже позволяет ускорить исполнение программ) и очень широко используется. Исключения согласуются с философией Python (10-й пункт «дзена Python» — «Ошибки никогда не должны умалчиваться») и являются одним из средств поддержки «утиной типизации».

Иногда вместо явной обработки исключений удобнее использовать блок with (доступен, начиная с Python 2.5).

6.7. Итераторы


В программах на Питоне широко используются итераторы. Цикл for может работать как с последовательностью, так и с итератором. Все коллекции, как правило, предоставляют итератор. Объекты определённого пользователем класса тоже могут быть итераторами. Подробнее об итераторах можно узнать в разделе о функциональном программировании. Модуль itertools стандартной библиотеки содержит много полезных функций для работы с итераторами.

6.8. Генераторы


Одной из интересных возможностей языка являются генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и текущую инструкцию). Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений. См. пример: генератор чисел Фибоначчи.

При вызове генератора функция немедленно возвращает объект-итератор, который хранит текущую точку исполнения и состояние локальных переменных функции. При запросе следующего значения (посредством метода next(), неявно вызываемого в for цикле) генератор продолжает исполнение функции от предыдущей точки останова до следующего оператора yield или return.

В Python 2.4 появились генераторные выражения — выражения, дающие в результате генератор. Генераторные выражения позволяют сэкономить память там, где иначе требовалось бы использовать список с промежуточными результатами:

>>> sum(i for i in xrange(1, 100) if i % 2 != 0)

2500

В этом примере суммируются все нечётные числа от 1 до 99.

Начиная с версии 2.5, Python поддерживает полноценные сопроцедуры: теперь в генератор можно передавать значения с помощью метода send() и возбуждать в его контексте исключения с помощью метода throw().

6.9. Управление контекстом выполнения


В Python 2.5 появились средства для управления контекстом выполнения блока кода — оператор with и модуль contextlib. См.: пример.

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

6.10. Декораторы


Начиная с версии 2.4, Python позволяет использовать т. н. декораторы[20] (не следует путать с одноимённым шаблоном проектирования) для поддержки существующей практики преобразования функций и методов в месте определения (декораторов может быть несколько). После долгих дебатов для декораторов стал использоваться символ @ в строках, предшествующих определению функции или метода. Следующий пример содержит описание статического метода без применения декоратора:

def myWonderfulMethod():

return "Некоторый метод"

myWonderfulMethod = staticmethod(myWonderfulMethod)

и с помощью декоратора:

@staticmethod

def myWonderfulMethod():

return "Некоторый метод"

Декоратор является ничем иным, как функцией, получающей в качестве первого аргумента декорируемую функцию или метод. Декораторы можно считать элементом аспектно-ориентированного программирования.

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

6.11. Другие возможности


В Python есть ещё несколько возможностей, отличающих его от многих других языков высокой гибкостью и динамичностью.

Например, класс является объектом, а в операторе определения класса можно использовать выражения в списке родительских классов.

def getClass():

return dict

class D(getClass()):

pass

d = D()

Можно модифицировать многие объекты во время исполнения, например классы:

>>> class X(object): pass



>>> y = X()

>>> y.wrongMethod() # такого метода пока нет

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'X' object has no attribute 'wrongMethod'

>>> X.wrongMethod = lambda self : 'im here' # добавим его

>>> y.wrongMethod() # так как доступ к методу приводит к поиску по __dict__ класса,

'im here' # то wrongMethod становится доступным всем экземплярам

1   2   3   4   5   6   7   8


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