Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
print get_last([1, 2, 3]) print get_last("abcd")
Содержание книги
- Поддержка Internet. Форматы данных
- Лекция#3:Элементы функционального
- Функциональная программа. Функция: определение и вызов
- Лучше всего рассмотреть синтаксис определения функции на нескольких примерах.После
- args - список аргументов в порядке их указания при вызове return max(args), min(args)
- def mylist(val, lst=[]): lst.append(val) return lst
- Функции как параметры и результат
- gt;>> print range(1, 10)
- Частный случай применения map()-использование None в качестве первого аргумента.В
- return reduce(lambda x, y: x + y, lst, start)
- Итераторы можно применять вместо последовательности в операторе for. Более того,внутренне оператор for запрашивает от последовательности ее итератор. Объект
- def forit(mystate=[]): if len(mystate) < 3: mystate.append(" ")
- Функции 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
print get_last([1, 2, 3]) print get_last("abcd")
Описанной функции будет подходить в качестве аргумента все,от чего можно взять индекс -1(последний элемент).Однако семантика"взятие последнего элемента"выполняется только для последовательностей.Функция будет работать и для словарей,но смысл при этом будет немного другой.
Имитация типов
Для иллюстрации понятия полиморфизма можно построить собственный тип,похожий на встроенный тип"функция".Построить класс,объекты которого вызываются подобно методам или функциям,можно так:
class CountArgs(object):
def __call__(self, *args, **kwargs): return len(args) + len(kwargs)
cc = CountArgs() print cc(1, 3, 4)
Как видно из этого примера,экземпляры класса CountArgs можно вызывать подобно
функциям(в результате будет возвращено количество переданных параметров).При
попытке вызова экземпляра на самом деле будет вызван метод __call__() со всеми аргументами.
Следующий пример показывает,что сравнением экземпляров класса тоже можно управлять:
class Point:
def __init__(self, x, y): self.coord = (x, y)
def __nonzero__(self):
return self.coord[0] != 0 or self.coord[1] != 0 def __cmp__(self, p):
return cmp(self.coord, p.coord)
for x in range(-3, 4): for y in range(-3, 4):
if Point(x, y) < Point(y, x): print "*",
elif Point(x, y): print ".",
else:
print "o", print
Программа выведет:
. * * * * * *
. . * * * * *
. . . * * * *
. . . o * * *
. . . . . * *
. . . . . . *
. . . . . . .
В данной программе класс Point(Точка)имеет метод __nonzero__(),который определяет истинностное значение объекта класса.Истину будут давать только точки,отличные от (0, 0).Другой метод-__cmp__()-вызывается при необходимости сравнить точку и другой объект(имеющий как и точка атрибутcoord,который содержит кортеж как минимум из двух элементов).Нужно заметить,что вместо __cmp__ можно определить отдельные методы для операций сравнения:__lt__,__le__,__ne__,__eq__,__ge__,__gt__(для <,<=,!=,<>,
=>,> соответственно).
Достаточно легко имитировать и числовые типы.Класс,который пользуется удобством синтаксиса инфиксного +,можно определить так:
class Plussable:
def __add__(self, x):
|