python 学习笔记---函数式编程之高阶函数
2015-01-18 15:25
549 查看
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此 任意一个函数,只要他的输入是确定的,输出就是确定的。这种纯函数我们称之为没有副作用的。而允许使用变量的程序设计语言,由于函数内部的变量状态的不确定,同样的输入,可能得到不同的输出,因此这种函数是有副作用的。
函数式编程的一个特点是,允许吧函数本身作为参数传入到另一个函数,还允许返回一个函数!
python 对函数是编程提供部分的支持,由于Python函数内允许使用变量 因此 Python不是纯函数式编程。
1:高阶函数:
1:变量可以指向函数
可见一个变量可以指向函数本身 然后通过这个变量来调用函数。
2:函数名也是变量
可见其实名也相当于一个变量 只是这个变量指向的是一个函数过程 如果更改了这个变量的值 那么在执行原来的函数调用就会报错。 要恢复 可以重启 Python交互环境
3: 传入函数
可见函数是可以当做一个参数 传入到一个函数中 这种接受一个函数作为参数的函数我们称之为高阶函数。
2:高阶函数:map/reduce
Python内置map() 和reduce()两个函数
1:map(函数,序列(list)) 将序列中的每一个元素都用函数作用一遍 生成一个新的序列 然后将这个序列返回
代码简单明了。意思清楚明白
2:reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4) reduce 相当于对序列的两个元素做函数运算 然后将返回值与下一个继续做函数运算。
相当于对上述序列求和
相当于组成一个数值
相当于首字母大写 其余字母小写(很简洁 与漂亮)
3:filter() 函数用于过滤序列(与map()相似 filter()也接受一个函数和一个序列 filter把传入的序列 的每一个元素作用于函数 然后根据返回的值true和false 决定丢弃还是保留)
相当于保留奇数
相当于删除空字符串 filter 过滤器 关键在与如何正确的实现一个筛选函数
.........
求100以内的素数(代码相当的简洁 相对于其他的语言需要写两个for 循环 不过相对来说速度不行)
4:sorted() 排序算法
sorted() 函数 直接接受一个序列 对这个序列进行排序
sorted 传入一个自定义的比较算法 然后根据这个算法进行排序
函数式编程的一个特点是,允许吧函数本身作为参数传入到另一个函数,还允许返回一个函数!
python 对函数是编程提供部分的支持,由于Python函数内允许使用变量 因此 Python不是纯函数式编程。
1:高阶函数:
1:变量可以指向函数
>>>f=abs >>>f <build-in function abs> >>>f(-10) 10
可见一个变量可以指向函数本身 然后通过这个变量来调用函数。
2:函数名也是变量
>>>abs=10 >>>abs 10
可见其实名也相当于一个变量 只是这个变量指向的是一个函数过程 如果更改了这个变量的值 那么在执行原来的函数调用就会报错。 要恢复 可以重启 Python交互环境
3: 传入函数
def add(x,y,f): return f(x)+f(y) >>>add(-5,6,abs) >>>11
可见函数是可以当做一个参数 传入到一个函数中 这种接受一个函数作为参数的函数我们称之为高阶函数。
2:高阶函数:map/reduce
Python内置map() 和reduce()两个函数
1:map(函数,序列(list)) 将序列中的每一个元素都用函数作用一遍 生成一个新的序列 然后将这个序列返回
>>>def f(x): return x*x >>>map(f,[1,2,3,4,5]) [1,4,9,16,25] >>>map(str,[1,2,3,4,5]) ['1','2','3','4','5']
代码简单明了。意思清楚明白
2:reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4) reduce 相当于对序列的两个元素做函数运算 然后将返回值与下一个继续做函数运算。
>>>def add(x,y) return x+y >>>reduce(add,[1,3,5,7,9]) 25
相当于对上述序列求和
>>>def fn(x,y) return x*10+y >>>reduce(fn,[1,3,5,7,9]) 13579
相当于组成一个数值
>>>def norm(x) return x[0].upper()+x[1:].lower() >>>map(norm,['KdiI','AdDe','JDK']) ['Kdii','Adde','Jdk']
相当于首字母大写 其余字母小写(很简洁 与漂亮)
3:filter() 函数用于过滤序列(与map()相似 filter()也接受一个函数和一个序列 filter把传入的序列 的每一个元素作用于函数 然后根据返回的值true和false 决定丢弃还是保留)
>>>def is_odd(n) return n%2 ==1 >>>filter(is_odd,[1,2,3,4,5,6,7,8,9]) [1,3,5,7,9]
相当于保留奇数
>>>def not_empty(n) return n and n.strip() >>>filter(not_empty,['A','B','',None,'c']) ['A','B','c']
相当于删除空字符串 filter 过滤器 关键在与如何正确的实现一个筛选函数
>>>def delP(n): list=range(2,n/2+1) if n<2: return False for i in list: if n%i == 0: return False return True >>>fliter(delP,range(100))
.........
求100以内的素数(代码相当的简洁 相对于其他的语言需要写两个for 循环 不过相对来说速度不行)
4:sorted() 排序算法
>>>sorted([36,5,12,9,21]) [5,9,12,21,36] >>>sorted(['a','dsf',12,23]) [12,23,'a','dsf']
sorted() 函数 直接接受一个序列 对这个序列进行排序
>>>def reversed_cmp(x,y) if x>y: return -1 if x<y: return 1 return 0 >>>sorted([36,5,12,9,21],reversed_cmp) [36,21,12,9,5]
sorted 传入一个自定义的比较算法 然后根据这个算法进行排序
相关文章推荐
- 【python学习笔记】函数式编程:返回函数
- Python学习笔记11:Python函数和函数式编程
- Python进阶学习笔记——函数式编程之高阶函数
- 【Python学习笔记】函数式编程:偏函数
- 【Python学习笔记】函数式编程
- "Python"学习笔记----函数式编程
- 【Python学习笔记】函数式编程:高阶函数
- Python学习笔记——函数式编程
- Python学习笔记07_函数式编程
- Python学习笔记(五)——函数式编程
- 【Python】学习笔记——-5.0、函数式编程
- Python学习笔记——函数式编程
- python2.7学习笔记(7) ——函数式编程
- 【Python学习笔记】函数式编程:装饰器
- Python学习笔记二:函数式编程
- python学习笔记-函数式编程、迭代器和生成器
- 【Python学习笔记】函数式编程:高阶函数sorted
- 【Python学习笔记】函数式编程:匿名函数lambda
- 【Python学习笔记】函数式编程:高阶函数map和reduce
- Python学习(20):Python函数(4):关于函数式编程的内建函数