Python匿名函数lambda和函数式编程简析

匿名函数不会在任何空间里创建名字,故可以节省大量开销。这是匿名函数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%2

allNums=[]
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)

 

 

posted @   TIM3347_Tian  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示