Читаем Язык программирования Python полностью

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). Были указаны недостатки ООП, но при этом весь предыдущий материал объективно свидетельствовал о достоинствах этого подхода.

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

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

В данной лекции рассматривается пакет 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), поэтому длину вдоль одной из размерностей задавать не обязательно.

Через атрибут flat можно получить одномерное представление массива:

Листинг

>>> a = array([[1, 2], [3, 4]])

>>> b = a.flat

>>> b

array([1, 2, 3, 4])

>>> b[0] = 9

>>> b

array([9, 2, 3, 4])

>>> a

array([[9, 2],

[3, 4]])

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT