444人阅读 评论(0)

# 函数式编程扫盲篇

1. 概论

2. 什么是函数式编程

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

3. 从并发说开来

4. 变量的不变性

class Account:
def __init__(self,balance):
self.balance = balance
def desposit(self,amount):
self.balance = self.balance + amount
return self.balance
def despositTwice(self):
self.balance = self.balance * 2
return self.balance

if __name__ == '__main__':
account = Account(100)
print(account.desposit(10))
print(account.despositTwice())

def makeAccount(balance):
global desposit
global despositTwice
def desposit(amount):
result = balance + amount
return result
def despositTwice():
result = balance * 2
return result
def dispatch(method):
return eval(method)
return dispatch

if __name__ == '__main__':
handler = makeAccount(100)
print(handler('desposit')(10))
print(handler('despositTwice')())

5. 再看函数式编程的崛起

1、集成电路芯片上所集成的电路的数目，每隔18个月就翻一番。

2、微处理器的性能每隔18个月提高一倍，而价格下降一半。

3、用一个美元所能买到的电脑性能，每隔18个月翻两番。

6. 函数式编程的第一型

def Filt(arr,func):
result = []
for item in arr:
result.append(func(item))
return result

def MyFilter(ele):
if ele < 0 :
return 0
return ele

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
print('%s' % (Filt(arr,MyFilter)))

• 接受一个或多个函数作为输入
• 输出一个函数

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
func = MyFilter
print('%s' % (Filt(arr,func)))

if __name__ == '__main__':
arr = [-5,3,5,11,-45,32]
print('%s' % (map(lambda x : 0 if x<0 else x ,arr)))

7. 函数式编程的数学本质

8. 函数式编程的抽象本质

9.状态到底怎么办

ps：在Erlang中，进程之间的交互传递变量是靠“信箱”的收发信件来实现，其实我们想一想，从本质而言，也是将变量作为一个附属品来传递么！

def expr(x,n):
result = 1
for i in range(1,n+1):
result = result * x
return result

if __name__ == '__main__':
print(expr(2,5))

def expr(num,n):
if n==0:
return 1
return num*expr(num,n-1)

if __name__ == '__main__':
print(expr(2,5))

10. 函数式编程和递归

def Fib(a):
if a==0 or a==1:
return 1
else:
return Fib(a-2)+Fib(a-1)

def Fib(n):
a=1
b=1
n = n - 1
while n>0:
temp=a
a=a+b
b=temp
n = n-1
return b

11.  尾递归，伪递归

def Fib(a,b,n):
if n==0:
return b
else:
return Fib(b,a+b,n-1)

12. 惰性求值与并行

take 10 (repeat 1)

def getResult():
a = getA()   //Take a long time
b = getB()   //Take a long time
c = a + b

def Test():
print('Please enter a number:')
a = raw_input()

13. 函数式编程总览

1. 数学推理

2. 并行程序

0
0

【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐（算法+实战）--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：27359次
• 积分：371
• 等级：
• 排名：千里之外
• 原创：10篇
• 转载：3篇
• 译文：0篇
• 评论：0条
评论排行
最新评论