热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Python中的匿名函数lambda及其在函数式编程中的应用

匿名函数不会在任何空间里创建名字,故可以节省大量开销。这是匿名函数lambda的使用示例:a=lambda x,y=2:x+y 是这样调用它的&#x

匿名函数不会在任何空间里创建名字,故可以节省大量开销。这是匿名函数lambda的使用示例:

a=lambda x,y=2:x+y

是这样调用它的:

a(3)
a(3,5)

分别输出5(3+2)和8(3+5)

接下来是内建函数filter(),map(),reduce()分别用于过滤,映射,迭guolvqi代。

1)filter()过滤器

源代码大致如此:

def filter(bool_func,seq):filtered_seq=[]for eachItem in seq:if bool_func(eachItem):filtered_seq.append(eachItem)return filtered_seq

原理是当判为true时加入新的filtered_seq列表中去,否则舍去

bool_func是过滤法则,seq是传入列表,filtered_seq是传出列表

示例脚本:该脚本产生一个较大的随机数集合,在过滤掉所有偶数,留下奇数

from random import randint as ri
print(n for n in [ri(1,99)for i in range(9)]if n%2)

下面这种写法更直接:

from random import randint
def odd(n):return n%2allNums=[]
for eachNum in range(9):allNums.append(randint(1,99))
print(filter(odd,allNums))

但是上一种开销更少更简洁。且没有使用filter(),因为尽量避免使用函数可以减少程序不必要的开销。

2)map()映射函数

给出大致源代码:

def map(func,seq):mapped_seq=[]for eachItem in seq:mapped_seq.append(eachItem)return mapped_seq

func是映射规则,seq是传入的原列表,mapped_seq是返回后的映射内容

可用于散列表(字典)的创建过程中。

不多细讲。

3)reduce()迭代器

这种也称之”折叠“,类似这样:

reduce(func,[1,2,3])
func(func(1,2),3)

他们作用是等价的。

给出一个示例:

print('the total is:',reduce((lambda x,y:x+y),range(5))

输出the total is 10,实际上进行了如此的操作:(((0+1)+2)+3)4)

 

 


推荐阅读
author-avatar
诸葛二蛋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有