Python基础之函数式

函数式

函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter。

匿名函数lambda

对比使用def关键字创建的是有名字的函数,使用lambda关键字创建则是没有名字的函数,即匿名函数,语法如下
lambda 参数1,参数2,…: expression

# 1、定义
lambda x,y,z:x+y+z
#等同于
def func(x,y,z):
    return x+y+z

# 2、调用
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)
# 方式二:
func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的
res=func(1,2,3)

map、reduce、filter

函数map、reduce、filter都支持迭代器协议,用来处理可迭代对象,我们以一个可迭代对象array为例来介绍它们三个的用法:

array=[1,2,3,4,5]

1. 对array的每个元素做平方处理,可以使用map函数

map函数可以接收两个参数,一个是函数,另外一个是可迭代对象,具体用法如下

res=map(lambda x:x**2,array)
res
>>> <map object at 0x1033f45f8>
# 解析:map会依次迭代array,得到的值依次传给匿名函数(也可以是有名函数),而map函数得到的结果仍然是迭代器。
list(res) #使用list可以依次迭代res,取得的值作为列表元素
>>> [1, 4, 9, 16, 25]

2. 对array进行合并操作,比如求和运算,这就用到了reduce函数

reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值

# reduce在python2中是内置函数,在python3中则被集成到模块functools中,需要导入才能使用
from functools import reduce 
res=reduce(lambda x,y:x+y,array)
res
>>> 15
"""
解析:
1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,
	作为第一个值数传给x,然后继续迭代一次array得到的值作为第二个值传给y,
	运算的结果为3
2 将上一次reduce运算的结果作为第一个值传给x,
	然后迭代一次array得到的结果作为第二个值传给y,
	依次类推,知道迭代完array的所有元素,得到最终的结果15
	也可以为reduce指定初始值
"""
res=reduce(lambda x,y:x+y,array,100)
res
>>> 115

3. 对array进行过滤操作,这就用到了filter函数,比如过滤出大于3的元素

res=filter(lambda x:x>3,array)
"""
解析:
filter函数会依次迭代array,得到的值依次传给匿名函数,
如果匿名函数的返回值为真,则过滤出该元素,而filter函数得到的结果仍然是迭代器。
"""
list(res) 
>>> [4, 5]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值