Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Лекция#5:Численные алгоритмы.Матричные
Содержание книги
- Функции itertools.imap(), itertools.starmap() и itertools.ifilter()
- lst = map(lambda x: math.sin(x*.4), range(30))
- quot;""Итератор последовательности Фибоначчи до N"""
- for line in (l.replace("- ", " - ") for l in open("input.dat")): print line
- print subtract(3, 2) subtract_from_3 = curry(subtract, 3) print subtract_from_3(2)
- Все данные в нем представляются объектами.
- С точки зрения объектно-ориентированного подхода,объект-это нечто,обладающее
- Интерпретатор языкаPythonвсегда может сказать,к какому типу относится объект.Однако
- Пока что вpythonесть"классические"и"новые"классы. Первые классы определяются сами по себе,а вторые обязательно ведут свою родословную от класса object. Для целей
- from sets import Set as set # тип для множества
- def getx(self): return self.__x
- Этот метод вызывается при присваивании значения некоторому атрибуту.В отличие от __getattr__(),метод всегда вызывается,а
- print ad.a, ad.b, ad.c ad.d = 512
- print get_last([1, 2, 3]) print get_last("abcd")
- gt;>> class A(object): pass
- class ABC: a = ma b = mb c = mc
- В случае,когда надклассы имеют одинаковые методы,использование того или иного метода определяется порядком разрешения методов(method resolution order). Для
- quot;""Поместить элемент на стек"""
- def __init__(self, lst, n): self.n = n
- gt;>> s = MyClass() # создается экземпляр класса
- children = [cls.convert(child) for child in val] return cls(val.node, children)
- convert = classmethod(convert)
- def my_method(self): print "self:", self
- from Multimethod import Method, Generic, AmbiguousMethodError
- Должен возвращать кортеж из аргументов,который будет
- Лекция#5:Численные алгоритмы.Матричные
- Для создания массива можно использовать функцию array() с указанием содержимого массива(в виде вложенных списков)и типа. Функция array() делает копию,если ее
- Объекты-массивы Numeric используют расширенный синтаксис выделения среза.Следующие примеры иллюстрируют различные варианты записи срезов.Функция
- каждый третий элемент строки 1
- Наименьшее(наибольшее)целое,большее(меньшее)или
- gt;>> add.accumulate([1, 2, 3, 4])
- add.reduce(a, axis). cumsum(a, axis). add.accumulate(a, axis). product(a, axis). multiply.reduce(a, axis). cumproduct(a, axis). multiply.accumulate(a, axis). alltrue(a, axis). logical_and.reduce(a, axis). sometrue(a, axis). logical_or.reduce(a, axis). Фун
- Второе измерение,образующее вместе с первым плоскость,на которой и берется
- Индекс минимального значения в массиве по заданному
- Суммирование с промежуточными результатами
- Возвращает индексы ненулевых элементов одномерного массива
- Выбор частей массива a на основе индексов indices по измерению axis
- gt;>> print "Проверка:", Numeric.dot(a, x) - b
- gt;>> print RandomArray.normal(0, 1, 30)
- negative_binomial(trials, p, shape=[])
- iso_ir_6': 'ascii', 'maccyrillic': 'mac_cyrillic', 'iso_celtic': 'iso8859_14', 'ebcdic_cp_wt': 'cp037', 'ibm500': 'cp500', ...
- sys:1: DeprecationWarning: Non-ASCII character '\xf0' in file example.py on line 2, but no encoding declared;
- В строке формата кроме текста могут употребляться спецификации,регламентирующие формат выводимого значения.Спецификация имеет синтаксис
- Восьмеричное беззнаковое целое
- File "/home/rnd/tmp/Python-2.4b2/Lib/string.py", line 172, in substitute return self.pattern.sub(convert, self.template)
- Возвращает наименьший индекс,с которого начинается вхождение подстроки sub в строку.Параметры start и end
- Удаляет пробельные символы слева
- text = open(string.__file__[:-1]).read() start = 0
- import StringIO my_string = "1234567890" f1 = StringIO.StringIO()
- Синтаксис регулярного выражения
Критика ООП
Объектно-ориентированный подход сегодня считается"самым передовым".Однако не следует слепо верить в его всемогущество.Отдача(в виде скорости разработки)от объектного проектирования чувствуется только в больших проектах и в проектах,которые родственны объектному подходу:построение графического интерфейса,моделирование систем и т.п.
Также спорна большая гибкость объектных программ к изменениям.Она зависит от того,вносится ли новый метод(для серии объектов)или новый тип объекта.При процедурном подходе при появлении нового метода пишется отдельная процедура,в которой в каждой ветке алгоритма обрабатывается свой тип данных(то есть такое изменение требует редактирования одного места в коде).При ООП изменять придется каждый класс,внося в него новый метод(то есть изменения в нескольких местах).Зато ООП выигрывает при
внесении нового типа данных:ведь изменения происходят только в одном месте,где описываются все методы для данного типа.При процедурном подходе приходится изменять несколько процедур.Сказанное иллюстрируется ниже.Пусть имеются классы A,B,C и методы a,b,c:
# ООП
class A:
def a(): ...
def b(): ...
def c(): ...
class B:
def a(): ...
def b(): ...
def c(): ...
class C:
def a(): ...
def b(): ...
def c(): ...
# процедурный подход
def a(x):
if type(x) is A: ...
if type(x) is B: ...
if type(x) is C: ...
def b(x):
if type(x) is A: ...
if type(x) is B: ...
if type(x) is C: ...
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).Были указаны недостатки ООП,но при этом весь предыдущий материал объективно свидетельствовал о достоинствах этого подхода.
Возможно,что именно эта лекция приведет слушателей к пониманию ООП,пригодному и удобному для практической работы.
Ссылки
Дэвид Мертцhttp://www-106.ibm.com/developerworks/linux/library/l-pymeta.html
|