体验Python函数式编程
来源:互联网 发布:金蝶k3数据字典 下载 编辑:程序博客网 时间:2024/05/17 05:02
在函数式编程里面, 我们可以定义匿名函数,也可以把函数赋值给一个变量或作为参数传递给另外一个函数,Python语言很早就支持函数式编程,我们可以用lambda关键字定义一个匿名函数,然后赋值给一个变量,如下所示:
>>> f=lambda(n):n**2
>>> f(6)
36
>>> f=lambda(n):lambda(m):n*m
>>> g=f(5) #相当与g=lambda(m):5*m
>>> g(9) #相当于5*9
45
lambda定义的匿名函数可以引用外围函数的变量,上面的代码中,第二个lambda表达式定义的匿名函数引用了第一个匿名函数的参数n,因为第一个匿名函数是第二个匿名函数的外围函数。
除了lambda表达式之外,python还支持将函数作为参数传递给另外一个函数,有点类似于C语言中的函数指针,python语言内建的函数filter,map,reduce就可以接受函数参数。filter(function, sequence)会遍历sequence中的每一个item,并以该item为参数调用function,如果function返回ture,就将该item加到结果sequence中,这就达到过滤sequence的效果,作为参数的function就是过滤的条件,例子如下:
>>> a=range(1,10)
>>> filter(lambda(n):n%2==0,a)
[2, 4, 6, 8]
这里用lambda定义的匿名函数来定义过滤条件,在list a中返回是偶数的items
map(function, sequence)也是遍历sequence中的每一个item,并以该item为参数调用function,然后将执行结果添加到最终的结果sequence中,例子如下:
>>> b=range(1,10)
>>> map(lambda(n):n**2,b)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce(function, sequence)先把sequence中的头两个item作为参数传给function,将function的运行结果跟第三个item作为参数再次传给function,直至遍历完sequence,最后把单个值返回,例子如下:
>>> def add(x,y):
return x+y
>>> reduce(add,range(1,10))
45
>>> f=lambda(n):n**2
>>> f(6)
36
>>> f=lambda(n):lambda(m):n*m
>>> g=f(5) #相当与g=lambda(m):5*m
>>> g(9) #相当于5*9
45
lambda定义的匿名函数可以引用外围函数的变量,上面的代码中,第二个lambda表达式定义的匿名函数引用了第一个匿名函数的参数n,因为第一个匿名函数是第二个匿名函数的外围函数。
除了lambda表达式之外,python还支持将函数作为参数传递给另外一个函数,有点类似于C语言中的函数指针,python语言内建的函数filter,map,reduce就可以接受函数参数。filter(function, sequence)会遍历sequence中的每一个item,并以该item为参数调用function,如果function返回ture,就将该item加到结果sequence中,这就达到过滤sequence的效果,作为参数的function就是过滤的条件,例子如下:
>>> a=range(1,10)
>>> filter(lambda(n):n%2==0,a)
[2, 4, 6, 8]
这里用lambda定义的匿名函数来定义过滤条件,在list a中返回是偶数的items
map(function, sequence)也是遍历sequence中的每一个item,并以该item为参数调用function,然后将执行结果添加到最终的结果sequence中,例子如下:
>>> b=range(1,10)
>>> map(lambda(n):n**2,b)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce(function, sequence)先把sequence中的头两个item作为参数传给function,将function的运行结果跟第三个item作为参数再次传给function,直至遍历完sequence,最后把单个值返回,例子如下:
>>> def add(x,y):
return x+y
>>> reduce(add,range(1,10))
45
- 体验Python函数式编程
- Python编程初体验
- python函数式编程
- Python 函数式编程
- python 函数式编程
- python函数式编程
- Python:函数式编程
- Python函数式编程
- python 函数式编程
- python函数式编程
- python函数式编程
- python-函数式编程
- python 函数式编程
- python函数式编程
- python函数式编程
- Python--函数式编程
- Python: 函数式编程
- Python函数式编程
- 写给对前途迷茫的朋友:五句话定会改变你的人生
- "Ruby".say_hello
- ListView的使用技巧
- 送大华使抚顺
- http://blog.tomatolei.com/?275753/action_viewspace_itemid_68.html
- 体验Python函数式编程
- Spring学习笔记 补充
- Nand Flash
- web.xml的奇怪问题
- FastReport如何知道任意坐标是否有数据打印?
- vi常用设置
- 你知道什么是web2.0吗
- vb-对象库未注册 问题的一种解决方法
- 熊猫烧香被恶搞,网友爆笑诗词句大集合[zz]