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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!