FindTheSlide.com - это сайт презентаций, докладов, шаблонов в формате PowerPoint.
Email: Нажмите что бы посмотреть
Императивное программирование
Программы представляют собой последовательность действий с уcловными и безусловными переходами.
Декларативное программирование
Способ, описывающий, не как решить задачу, а что нужно получить. Описывается спецификация программы.
Частный случай: функциональное программирование.
Ключевой вопрос:
ЧТО нужно вычислить, а не КАК.
Чистые функции
функция может управлять только выделенной для неё памятью, не модифицируя память вне своей области.
Ленивость
функция не производит вычислений до тех пор, пока их результат не будет необходим в работе программы.
Рекурсия
цикл организуется в виде рекурсии. переполнения
стека можно избежать при помощи хвостовой рекурсии.
Функциональная программа:
ни целиком, ни частями состояния не имеет.
описывает, ЧТО должно быть вычислено. Является выражением, определенным в терминах заранее заданных функций и функций, заданных пользователем. Величина этого выражения – результат программы.
в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных.
Удобство организации модульного тестирования
возможность протестировать каждую функцию в программе, просто вычислив её от различных наборов значений аргументов.
Возможности оптимизации при компиляции
так как не задана последовательность выполнения.
Возможности параллелизма.
всегда допустимо параллельное вычисление двух различных параметров . Порядок их вычисления не может оказать влияния на результат вызова.
def Без аргументов return используется для выхода из функции без возвращаемого значения. Тип возвращаемого значения определяется аргументами, которые передаются функции. Определение и использование на месте: Итератор – объект, позволяющий программисту перебирать все элементы коллекции без учёта её особенностей реализации. def gen_fibonacci(n=100): sum(i for i in xrange(1, 100) if i % 2 != 0)
...
return
В этом случае возвращается значение None.
Слайд 11
Функции в Python.
не является однозначно определенным. Важен только объект на который ссылается имя.
определение функции происходит во время выполнения.
имя функции
othername = func #связывание объекта функции
с именем
othername() #вызов функции
Слайд 12
Функции в Python.
y**2
def func(x, y):
return x**2 +
func = lambda x, y: x**2 + y**2
>>> (lambda x: x+2)(5)
7
Слайд 13
Функции в Python. Аргументы.
def func(x, y, z=7)
return x+y+z
print func(1, y=3) # 1+3+7=11
Слайд 14
Области видимости.
внутри инструкции def. К ним нельзя обратиться за пределами функции.
Имена, определяемые внутри инструкции def, видны ТОЛЬКО программному коду
Имена, определяемые внутри инструкции def, не вступают в конфликт с именами, находящимися за пределами инструкции def.
Слайд 15
Области видимости.
определены в модуле:
#Глобальная область видимости.
X = 99 # X и func
глобальная область
def func(Y): # Y и Z определены в функции:
локальная область
#Локальная область видимости
Z = X + Y # X – глобальная переменная
return Z
func(1) #result = 100
Слайд 16
Области видимости. Инструкция global.
в модуле.
y, z = 1,2 #Глобальные переменные
def all_global():
global x #объявляется глобальной
для присваивания
x = y + z
Слайд 17
Функции в Python.
есть, они могут употребляться в программе наравне с объектами других типов данных.
Функции в Python являются объектами первого класса, то
Слайд 18
List comprehension.
(Списочные выражения)
** 2 for a in range(5) ]
range(5)
#[0, 1, 2, 3, 4]
L = [ a
#[0, 1, 4, 9, 16]
L = [a**2 for a in range(5) if a % 2 == 1]
#[1, 9]
L = [a1 + a2 for a1 in ['a','b','c'] for a2 in ['x','y']]
#['ax', 'ay', 'bx', 'by', 'cx', 'cy']
Слайд 19
Функции высших порядков. Map().
x+10
list1 = [1,3,5]
list2 =[1,2,3]
def inc(x):
return
map(inc, list1)
#[11, 13, 15]
map(lambda x, y: x**y, list1, list2)
#[1, 9, 125]
[x * y for x, y in zip(list1, list2)]
#[1, 9, 125]
Слайд 20
Функции высших порядков. Filter()
x: x < 5, list)
list = [9, 1, -4, 3, 8]
filter(lambda
#[1, -4, 3]
list = [9, 1, -4, 3, 8]
[x for x in list if x < 5]
# [1, -4, 3]
Слайд 21
Функции высших порядков. Reduce()
list = [2, 3, 4, 5, 6]
reduce(lambda res, x: res*x, list, 1)
#720 = ((((1*2)*3)*4)*5)*6
reduce(lambda res, x: res*x, [], 1)
#1
reduce(lambda res, x: [x]+res, [1, 2, 3, 4], [])
#[4, 3, 2, 1]
reversed([1,2,3,4,5])
#[5,4,3,2,1]
Слайд 22
Функции высших порядков. Apply()
print x, y, z, a, b
def f(x, y, z, a=None, b=None):
apply(f, [1, 2, 3], {'a': 4, 'b': 5})
#1 2 3 4 5
f(*[1, 2, 3], **{'a': 4, 'b': 5})
1 2 3 4 5
Слайд 23
Замыкания.
return x + n # захват переменной "x" из
def make_adder(x):
def adder(n):
внешнего контекста
return adder
# То же самое, но через безымянные функции:
make_adder = lambda x: ( lambda n: ( x + n ) )
f = make_adder(10)
print f(7) # 17
print f(-4) # 6
Слайд 24
Замыкания. Partial.
return a + b
from functools import partial
def add(a, b):
add1 = partial(add, b=1)
print add1(2)
#3
Слайд 25
Итераторы.
модуле itertools есть функции для работы с итераторами, позволяющие кратко и эффективно выразить требуемые процессы обработки списков.
it = enumerate(sorted("PYTHON")) it.next()
#(0, 'H')
print list(it)
#[(1,'N'),(2,'O'),(3,'P'),(4,'T'),(5,'Y')]
В
Слайд 26
Генераторы.
текущую инструкцию
генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и
a, b = 0, 1
while a < n:
yield a #вместо return
a, b = b, a+b # напечатать все числа Фибоначчи < 1000
for i in gen_fibonacci(1000):
print i
Слайд 27
Генераторные выражения.
позволяют сэкономить память там, где иначе требовалось бы использовать список с промежуточными результатами.
генераторные выражения — выражения, дающие в результате генератор
Генераторные выражения
#2500
Слайд 28
Литература.
программирования Python»
Марк Лутц. Изучаем Питон. 3-е издание.
http://ru.wikipedia.org/wiki/Функциональное_программирование_на_Питоне
http://ru.wikipedia.org/wiki/Функциональное_программирование
Г. Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач «Язык
Журнал «Практика функционального программирования» http://fprog.ru/