Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

def c(x):

if type(x) is A: …

if type(x) is B: …

if type(x) is C: …

При внесении нового типа объекта изменения в ОО–программе затрагивают только один модуль, а в процедурной — все процедуры:

Листинг

# ООП

class D:

def a: …

def b: …

def c: …

# процедурный подход

def a(x):

if type(x) is A: …

if type(x) is B: …

if type(x) is C: …

if type(x) is D: …

def b(x):

if type(x) is A: …

if type(x) is B: …

if type(x) is C: …

if type(x) is D: …

def c(x):

if type(x) is A: …

if type(x) is B: …

if type(x) is C: …

if type(x) is D: …

И наоборот, теперь нужно добавить новый метод обработки. При процедурном подходе просто пишется новая процедура, а вот для объектного приходится изменять все классы:

Листинг

# процедурный подход

def d(x):

if type(x) is A: …

if type(x) is B: …

if type(x) is C: …

# ООП

class A:

def a: …

def b: …

def c: …

def d: …

class B:

def a: …

def b: …

def c: …

def d: …

class C:

def a: …

def b: …

def c: …

def d: …

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

Заключение

Даже достаточно неформальное введение в ООП потребовало определения большого количества терминов. В лекции была сделана попытка с помощью примеров передать не столько букву, сколько дух терминологии ООП. Были рассмотрены все базовые понятия: объект, тип, класс и виды отношений между объектами (IS–A, HAS–A, USE–A). Слушатели получили представление о том, что такое инкапсуляция и полиморфизм в стиле ООП, а также наследование — продление времени жизни объекта за рамками исполняющейся программы, известное как устойчивость объекта (object persistence). Были указаны недостатки ООП, но при этом весь предыдущий материал объективно свидетельствовал о достоинствах этого подхода.

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

5. Лекция: Численные алгоритмы. Матричные вычисления.

В данной лекции рассматривается пакет Numeric для осуществления численных расчетов и выполнения матричных вычислений, приводится обзор других пакетов для научных вычислений.

Numeric Python — это несколько модулей для вычислений с многомерными массивами, необходимых для многих численных приложений. Модуль Numeric вносит в Python возможности таких пакетов и систем как MatLab, Octave (аналог MatLab), APL, J, S+, IDL. Пользователи найдут Numeric достаточно простым и удобным. Стоит заметить, что некоторые синтаксические возможности Python (связанные с использованием срезов) были специально разработаны для Numeric.

Numeric Python имеет средства для:

матричных вычислений LinearAlgebra;

быстрого преобразования Фурье FFT;

работы с недостающими экспериментальными данными MA;

статистического моделирования RNG;

эмуляции базовых функций программы MatLab.

Модуль Numeric

Модуль Numeric определяет полноценный тип–массив и содержит большое число функций для операций с массивами. Массив — это набор однородных элементов, доступных по индексам. Массивы модуля Numeric могут быть многомерными, то есть иметь более одной размерности.

Создание массива

Для создания массива можно использовать функцию array с указанием содержимого массива (в виде вложенных списков) и типа. Функция array делает копию, если ее аргумент — массив. Функция asarray работает аналогично, но не создает нового массива, когда ее аргумент уже является массивом:

Листинг

>>> from Numeric import *

>>> print array([[1, 2], [3, 4], [5, 6]])

[[1 2]

[3 4]

[5 6]]

>>> print array([[1, 2, 3], [4, 5, 6]], Float)

[[ 1. 2. 3.]

[ 4. 5. 6.]]

>>> print array([78, 85, 77, 69, 82, 73, 67], 'c')

[N U M E R I C]

В качестве элементов массива можно использовать следующие типы: Int8–Int32, UnsignedInt8–UnsignedInt32, Float8–Float64, Complex8–Complex64 и PyObject. Числа 8, 16, 32 и 64 показывают количество битов для хранения величины. Типы Int, UnsignedInteger, Float и Complex соответствуют наибольшим принятым на данной платформе значениям. В массиве можно также хранить ссылки на произвольные объекты.

Количество размерностей и длина массива по каждой оси называются формой массива (shape). Доступ к форме массива реализуется через атрибут shape:

Листинг

>>> from Numeric import *

>>> a = array(range(15), Int)

>>> print a.shape

(15,)

>>> print a

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

>>> a.shape = (3, 5)

>>> print a.shape

(3, 5)

>>> print a

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]]

Методы массивов

Придать нужную форму массиву можно функцией Numeric.reshape. Эта функция сразу создает объект–массив нужной формы из последовательности.

Листинг

>>> import Numeric

>>> print Numeric.reshape(«абракадабр», (5, — 1))

[[а б]

[р а]

[к а]

[д а]

[б р]]

В этом примере–1 в указании формы говорит о том, что соответствующее значение можно вычислить. Общее количество элементов массива известно (10), поэтому длину вдоль одной из размерностей задавать не обязательно.

Поделиться:
Популярные книги

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4

Креститель

Прозоров Александр Дмитриевич
6. Ведун
Фантастика:
фэнтези
8.60
рейтинг книги
Креститель

Искатель 2

Шиленко Сергей
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 2

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Старшеклассник без клана. Апелляция кибер аутсайдера 2

Афанасьев Семен
2. Старшеклассник без клана. Апелляция аутсайдера
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Старшеклассник без клана. Апелляция кибер аутсайдера 2

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2